WebClient 403 Запрещено
Я могу скачать это вручную в 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
Ответы
Ответ 1
Я получаю 403 в IE, я думаю, вам нужно войти в систему, чтобы получить ресурс.
Ваш браузер может хранить учетные данные, но ваше приложение не предназначено для входа в систему. Или вы вошли в Google в своем браузере - попробуйте выйти из системы и посмотреть, есть ли у вас доступ...
Ответ 2
Просто добавьте простую строку, прежде чем вы выполните загрузку:
string url = ...
string fileName = ...
WebClient wb = new WebClient();
wb.Headers.Add("User-Agent: Other"); //that is the simple line!
wb.DownloadFile(url, fileName);
Что это.
Ответ 3
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;
Ответ 4
У меня была эта проблема при попытке загрузить изображение с 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");
Это решение пришло из этого ответа.
Ответ 5
Вам нужно установить соответствующие заголовки HTTP, прежде чем вызывать метод DownloadFile
.
WebClient webClient = new WebClient();
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.Headers.Add("???", "???");
webClient.DownloadFile(address, filename);
Поставить правильные значения вместо этих вопросительных знаков может быть сложным. Вам нужно будет загрузить Fiddler или другую программу или расширение веб-браузера, чтобы узнать, какие заголовки HTTP отправляются в Google вашим веб-браузером и в основном копируют один и тот же запрос в вашей программе.
Ответ 6
Вот что случилось со мной:
Я пытался загрузить (общедоступный).xls файл (через метод DownloadFile), который удобно загружался из всех браузеров.
После попытки и борьбы со всеми ответами (но не повезло) я наконец открыл стек и заметил что-то странное (см. скриншот).
Несмотря на то, что файл загружался через http в браузере, но он выдавал ошибку 403 с помощью метода DownloadFile.
Наконец, я просто изменил URL-адрес из http://something в https://something, и он работал нормально.
Надеюсь, это поможет!
![Снимок экрана]()
Ответ 7
Я столкнулся с той же проблемой, пытаясь загрузить файл на URL-адрес Amazon 3S. Я писал об этом здесь:
http://blog.cdeutsch.com/2010/11/net-webclient-403-forbidden-error.html
Последнее решение, которое я использовал, было найдено здесь:
Получение URL-адреса с косой чертой с URL-адресами
Ответ 8
Ключом к решению этого для меня было сделать запрос один раз через код, второй раз в браузере, зарегистрировать оба запроса с Fiddler и обеспечить соответствие заголовков.
Мне пришлось добавлять заголовки для:
- Принять
- Accept-Encoding
- Accept-Language
- User-Agent
- Upgrade-Незащищенные-запросы
Я надеюсь, что это поможет людям в будущем.