Ошибка WebRequest C # 403 - PullRequest
       16

Ошибка WebRequest C # 403

1 голос
/ 23 октября 2009

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

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

Что делает Google Chrome, который позволяет обойти ошибку 403? Я пытался использовать пользовательский агент Google Chrome, но это мне не помогло.

Помощь

Ответы [ 3 ]

1 голос
/ 23 октября 2009

Код состояния 403 указывает, что ресурс, к которому вы пытаетесь получить доступ, является Запрещенным. Как, не спрашивайте, потому что вы не получаете это. Это отличается от кода 401 тем, что перед авторизацией сервера будет поставлена ​​задача авторизации.

Хотя это может быть программная конфигурация, это также может быть объяснено ограничениями доступа к ресурсу, настроенному через веб-сервер.

Можете ли вы проверить, является ли загруженный ресурс в Google Chrome ожидаемым ресурсом, к которому вы пытаетесь обратиться?

1 голос
/ 30 октября 2009

Спасибо за помощь. Ни один из ваших ответов не помог мне напрямую, но спасибо за попытку.

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

По сути, у меня не было доступа к командам веб-сервиса, поэтому все, что я мог сделать, это использовать базовые http-URL для получения предопределенного ответа. URL-адрес файла, который я использовал для получения файла сервера, не был уникальным, он был динамическим в зависимости от веб-браузера / сеанса. Я использовал объект HTTPRequest, чтобы получить HTML-файл, чтобы я мог его проанализировать. С помощью html-файла я проанализировал его, чтобы узнать динамический идентификатор файла (я думал, что он уникален). Затем я прикрепил бы это к концу URL. В Chrome я был бы перенаправлен и представлен с подсказкой загрузки. Проблема была в том, что мне нужен был объект webbrowser, когда я хотел вытащить файл. Зная это, я использовал объект webbrowser, чтобы получить идентификатор файла, затем использовал тот же объект webbrowser (технически те же сеансы в соответствии с веб-сервером), чтобы вытащить файл.

Это довольно сложно. По сути, моя программа - это небольшой хак, который предоставляет функциональность, которую сервер пытается блокировать.

Надеюсь, это помогло вам, ребята, в любом из ваших будущих проектов.

1 голос
/ 23 октября 2009

Возможно, веб-сервер распознает пользовательский агент Chrome и позволяет загружать файл им, но не другими пользовательскими агентами. Настройте веб-запрос на использование тех же строк и настроек агента пользователя, что и в Google Chrome - по умолчанию он может использовать настройки IE.

Редактировать: Вот инструкция от MSDN о том, как установить строку пользовательского агента WebRequest . Чтобы узнать пользовательский агент любого браузера, введите его в адресную строку:

javascript:prompt('my user agent string is', navigator.userAgent);
...