Я могу скачать это вручную в IE.
Но, используя следующий код
WebClient client = new WebClient();
client.DownloadFile(address, filename);
Показать исключение: 403 Запрещено
Что не так? Как я могу это сделать?
другие
Я могу скачать это вручную в IE.
Но, используя следующий код
WebClient client = new WebClient();
client.DownloadFile(address, filename);
Показать исключение: 403 Запрещено
Что не так? Как я могу это сделать?
другие
Я получаю 403 в IE, я думаю, вам нужно войти в систему, чтобы получить ресурс. Ваш браузер может хранить учетные данные, но ваше приложение не предназначено для входа в систему. Или вы вошли в Google в своем браузере - попробуйте выйти из системы и посмотреть, есть ли у вас доступ...
Просто добавьте простую строку, прежде чем вы выполните загрузку:
string url = ...
string fileName = ...
WebClient wb = new WebClient();
wb.Headers.Add("User-Agent: Other"); //that is the simple line!
wb.DownloadFile(url, fileName);
Что это.
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;
У меня была эта проблема при попытке загрузить изображение с URL сайта SharePoint. В моем случае установки user-agent
на Другое или пробела в заголовке было недостаточно, мне пришлось вместо этого установить user-agent
:
client.Headers.Add("user-agent", " Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
Это решение пришло из этого ответа.
Вам нужно установить соответствующие заголовки HTTP, прежде чем вызывать метод DownloadFile
.
WebClient webClient = new WebClient();
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.DownloadFile(address, filename);
Поставить правильные значения вместо этих вопросительных знаков может быть сложным. Вам нужно будет загрузить Fiddler или другую программу или расширение веб-браузера, чтобы узнать, какие заголовки HTTP отправляются в Google вашим веб-браузером и в основном копируют один и тот же запрос в вашей программе.
Вот что случилось со мной:
Я пытался загрузить (общедоступный).xls файл (через метод DownloadFile), который удобно загружался из всех браузеров.
После попытки и борьбы со всеми ответами (но не повезло) я наконец открыл стек и заметил что-то странное (см. скриншот).
Несмотря на то, что файл загружался через http в браузере, но он выдавал ошибку 403 с помощью метода DownloadFile.
Наконец, я просто изменил URL-адрес из http://something в https://something, и он работал нормально.
Надеюсь, это поможет!
Я столкнулся с той же проблемой, пытаясь загрузить файл на URL-адрес Amazon 3S. Я писал об этом здесь: http://blog.cdeutsch.com/2010/11/net-webclient-403-forbidden-error.html
Последнее решение, которое я использовал, было найдено здесь: Получение URL-адреса с косой чертой с URL-адресами
Ключом к решению этого для меня было сделать запрос один раз через код, второй раз в браузере, зарегистрировать оба запроса с Fiddler и обеспечить соответствие заголовков.
Мне пришлось добавлять заголовки для:
Я надеюсь, что это поможет людям в будущем.