WebClient 403 Запрещено - PullRequest
       15

WebClient 403 Запрещено

15 голосов
/ 17 июля 2010

Я могу загрузить это вручную в IE.

http://scholar.google.com/scholar.ris?q=info:j8ymU9rzMsEJ:scholar.google.com/&output=citation&hl=zh-CN&as_sdt=2000&oe=GB&ct=citation&cd=0

Но, используя следующий код

WebClient client = new WebClient();
client.DownloadFile(address, filename);

Показать исключение: 403 Запрещено

Что не так?Как я могу это сделать?

другие

http://scholar.google.com/scholar.ris?q=info:sskrpr5jlLwJ:scholar.google.com/&output=citation&hl=zh-CN&as_sdt=2000&oe=GB&ct=citation&cd=1

Ответы [ 9 ]

66 голосов
/ 02 августа 2011

Просто добавьте простую строку перед загрузкой:

string url = ... 
string fileName = ...

WebClient wb = new WebClient();
wb.Headers.Add("User-Agent: Other");   //that is the simple line!
wb.DownloadFile(url, fileName);

Вот и все.

4 голосов
/ 16 января 2018

403 также может быть вызвано проблемами TLS. Чтобы проверить это, вы должны проверить текст объекта WebException.Response.

     catch (WebException ex)
     {
        if (ex.Response != null)
        {
           var response = ex.Response;
           var dataStream = response.GetResponseStream();
           var reader = new StreamReader(dataStream);
           var details = reader.ReadToEnd();
        }
     }

Если это TLS, попробуйте добавить это в свой код для принудительной установки TLS1.2.

Для .net4:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

Для .net4.5 или новее:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

3 голосов
/ 18 октября 2018

У меня возникла эта проблема при попытке загрузить изображение с URL-адреса сайта SharePoint.В моем случае установки user-agent в значение Other или пробела в заголовке было недостаточно, мне пришлось установить user-agent следующим образом:

client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");

Это решение пришло из этого ответа.

1 голос
/ 21 февраля 2017

Вот что случилось со мной:

Я пытался загрузить (общедоступный) файл .xls (с помощью метода DownloadFile), который удобно загружался из всех браузеров.

После попыткии, борясь со всеми ответами (но не повезло), я наконец открыл стек и заметил нечто странное (см. скриншот).

Хотя файл загружался через браузер через http , но этовыдавал ошибку 403 с помощью метода DownloadFile .

Наконец, я просто изменил URL с http://something на https://something, и он работал нормально.

Надеюсь, это поможет!

Screenshot

1 голос
/ 17 июля 2010

Вам необходимо установить соответствующие заголовки http перед вызовом вашего метода DownloadFile.

WebClient webClient = new WebClient();
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.DownloadFile(address, filename);

Установить правильные значения вместо этих вопросительных знаков может быть непросто.Вам нужно будет загрузить Fiddler или какую-либо другую программу или расширение веб-браузера, чтобы узнать, какие заголовки http отправляются в Google вашим веб-браузером, и в основном повторить тот же запрос в вашей программе.

1 голос
/ 17 июля 2010

Я получаю 403 в IE, думаю, вам нужно войти в систему, чтобы получить ресурс.Ваш браузер может иметь кэшированные учетные данные, но ваше приложение не предназначено для входа в систему. Или вы вошли в Google в своем браузере - попробуйте выйти из системы и посмотреть, есть ли у вас доступ ....

0 голосов
/ 26 апреля 2018

Я сталкиваюсь с подобной проблемой при попытке загрузить файл с нескольких определенных веб-сайтов, что приводит к ошибке 403 для некоторых файлов, но не для других.

Я пробовал заголовок User-Agent, заголовки Accept, пробовал URL-адрес https и другие настройки, но безуспешно.

Оба URL-адреса будут загружаться в браузер и не требуют никакой аутентификации на веб-сайте для доступа к ним (они являются общедоступными), но один будет загружен, а другой возвращает 403.

Любая помощь в выяснении причины и способ ее устранения.

static void Main(string[] args)
    {
        WebClient webClient = new WebClient();
        webClient.Headers.Add("Accept: text/html, application/xhtml+xml, application/pdf, */*");
        webClient.Headers.Add("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
        webClient.Headers.Add("Accept-Encoding: gzip, deflate, br");
        webClient.Headers.Add("Accept-Language: en-US,en;q=0.9");
        webClient.Headers.Add("Cache-Control: no-cache");
        webClient.Headers.Add("Upgrade-Insecure-Requests: 1");
        try
        {

            webClient.DownloadFile(new Uri("https://www.vigil.aero/wp-content/uploads/PSB-10-2013-06-14-.pdf"), "test1.pdf");             
            Console.WriteLine("Complete");
        }
        catch (Exception ex)
        {
            Console.WriteLine("{0}", ex.Message);
        }
        try
        {


            webClient.DownloadFile(new Uri("https://www.vigil.aero/wp-content/uploads/PSB-9-2013-06-14.pdf"), "test2.pdf");
            Console.WriteLine("Complete");
        }
        catch (Exception ex)
        {
            Console.WriteLine("{0}", ex.Message);
        }
        Console.ReadLine();
    }                                   
0 голосов
/ 30 января 2017

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

Мне пришлось добавитьзаголовки для:

  • Accept
  • Accept-Encoding
  • Accept-Language
  • User-Agent
  • Upgrade-Insecure-Запросы

Надеюсь, это поможет людям в будущем.

0 голосов
/ 30 ноября 2010

Я столкнулся с той же проблемой, пытаясь загрузить файл по URL-адресу Amazon 3S. Я написал об этом здесь: http://blog.cdeutsch.com/2010/11/net-webclient-403-forbidden-error.html

Окончательное решение, которое я использовал, было найдено здесь: ПОЛУЧЕНИЕ URL с косой чертой в кодировке

...