WebClient - удаленный сервер вернул ошибку: (403) Запрещено

Открытие общедоступной страницы из браузера работает нормально.

Загрузка той же страницы с помощью WebClient выдает - (403) Запрещено.

Что здесь происходит ?

Вот пример быстрого копирования / вставки (используется в консольном приложении) на определенную страницу в Интернете:

try
{
    WebClient webClient = new WebClient();
    string content = webClient.DownloadString("http://he.wikisource.org/wiki/%D7%A9%D7%95%D7%9C%D7%97%D7%9F_%D7%A2%D7%A8%D7%95%D7%9A_%D7%90%D7%95%D7%A8%D7%97_%D7%97%D7%99%D7%99%D7%9D_%D7%90_%D7%90");
}
catch (Exception ex)
{
    throw;
}

person dzolnjan    schedule 08.05.2010    source источник
comment
как часто вы звоните по этому URL? вас могут задушить.   -  person Nix    schedule 08.05.2010
comment
Не так много, я думаю, несколько раз из браузеров, прежде чем попробовать с веб-клиентом. К настоящему времени я загружаю другие страницы с того же сайта гораздо чаще, и каждый раз они работают нормально. Получается, что эта страница выдает ошибку ?!   -  person dzolnjan    schedule 08.05.2010
comment
Страница может смотреть на заголовок пользовательского агента и отскакивать от вас, потому что вы его не предоставили.   -  person John Saunders    schedule 08.05.2010


Ответы (2)


Я только что попробовал запустить Fiddler, чтобы увидеть ответ, и он возвращает следующее уведомление с кодом состояния.

Сценарии должны использовать информативную строку User-Agent с контактной информацией, в противном случае они могут быть заблокированы по IP без уведомления.

Это работает.

    WebClient webClient = new WebClient();
    webClient.Headers.Add("user-agent", "Only a test!");

    string content = webClient.DownloadString("http://he.wikisource.org/wiki/%D7%A9%D7%95%D7%9C%D7%97%D7%9F_%D7%A2%D7%A8%D7%95%D7%9A_%D7%90%D7%95%D7%A8%D7%97_%D7%97%D7%99%D7%99%D7%9D_%D7%90_%D7%90");
person Martin Smith    schedule 08.05.2010
comment
Спасибо за это - это не решило для меня, но вы меня на трассе. В качестве предупреждения для тех, кто будет следовать, сначала проверьте свою собственную реализацию безопасности. Я забыл предоставить своему пользователю права на загрузку и получил (правильно) сообщение 403. Ничего общего с сервером IIS, клиентом, пользовательским агентом или чем-то еще. - person The Senator; 08.06.2015
comment
@TheSenator спасибо, в моем случае это были ограничения IP-адреса IIS. - person joym8; 03.10.2017

Убедитесь, что сервер, к которому вы пытаетесь получить доступ, настроен на использование улучшенного протокола TLS. Не забудьте добавить это в Global.asax.cs

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
person Hrvoje Matić    schedule 26.02.2019