C # HttpWebRequest игнорировать ошибку HTTP 500 - PullRequest
8 голосов
/ 07 октября 2010

Я пытаюсь загрузить страницу, используя класс WebRequest в C # 4.0. По какой-то причине эта страница возвращает все содержимое правильно, но с внутренним кодом ошибки HTTP 500.

Request.EndGetResponse(ar);

Когда страница возвращает HTTP 500 или 404, этот метод вызывает исключение WebException. Как я могу игнорировать это? Я знаю, что возвращается 500, но я все еще хочу прочитать содержимое страницы / ответа.

Ответы [ 4 ]

20 голосов
/ 07 октября 2010

Блок try / catch можно использовать для перехвата исключения и дополнительной обработки в случае ошибок http 404 или 500, просмотрев объект ответа, предоставляемый классом WebExeption.

try
{
    response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
    response = (HttpWebResponse)ex.Response;

    switch (response.StatusCode)
    {
        case HttpStatusCode.NotFound: // 404
            break;

        case HttpStatusCode.InternalServerError: // 500
            break;

        default:
            throw;
    }
}
7 голосов
/ 07 октября 2010
try {
    resp = rs.Request.EndGetResponse(ar);
} 
catch (WebException ex) 
{ 
    resp = ex.Response as HttpWebResponse; 
}
0 голосов
/ 10 марта 2017

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

просто добавьте useragent в свой код

request.UserAgent = "Mozilla / 5.0 (Windows NT 6.1; WOW64; rv: 2.0) Gecko / 20100101 Firefox / 4.0 ";

Код конца должен выглядеть примерно так:

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(http://WEBURL);
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
try
{
response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
response = (HttpWebResponse)ex.Response;

switch (response.StatusCode)
{
    case HttpStatusCode.NotFound: // 404
        break;

    case HttpStatusCode.InternalServerError: // 500
        break;

    default:
        throw;
}
}

Пожалуйста, найдите ссылку / доказательство для упомянутого вышеcode: https://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx

Это было упомянуто в ссылке

"Экземпляр WebClient не отправляет необязательные заголовки HTTP по умолчанию. Если для вашего запроса требуется необязательный заголовок, необходимо добавитьзаголовок для коллекции заголовков. Например, чтобы сохранить запросы в ответе, необходимо добавить заголовок агента пользователя. Кроме того, серверы могут возвращать 500 (Внутренняя ошибка сервера), если заголовок агента пользователя отсутствует. "

0 голосов
/ 07 октября 2010

Используйте блок try / catch, чтобы ваша программа продолжала работать, даже если выдается исключение:

try
{
    Request.EndGetResponse(ar);
}
catch (WebException wex)
{
    // Handle your exception here (or don't, to effectively "ignore" it)
}

// Program will continue to execute
...