Веб-клиент: игнорировать HTTP 500

Я пишу программу, которая извлекает некоторые данные с сервера, выполняет с ними некоторые операции и сохраняет вывод в файл csv. У меня проблема в том, что сервер (за который я не несу ответственности) ВСЕГДА возвращает внутреннюю ошибку сервера HTTP 500. Я поговорил с командой, которая занимается этим, и, хотя они знают об ошибке, они сказали, что она недостаточно влияет на их решение.

Есть ли способ игнорировать этот ответ в моем коде и по-прежнему получать данные?


person Matt G    schedule 12.11.2012    source источник
comment
Возвращает ли сервер данные, и только код состояния неверен, или тело ответа представляет собой сообщение об ошибке (например, ошибку ASP.NET)?   -  person dtb    schedule 12.11.2012
comment
Работает ли запрос в веб-браузере? Какой код состояния там возвращается? Какие различия существуют между запросом браузера и вашим запросом? Используйте Wireshark или Fiddler для просмотра HTTP-трафика.   -  person dtb    schedule 12.11.2012
comment
Сервер возвращает данные, да. Только код ответа неверный. Он работает в веб-браузере.   -  person Matt G    schedule 12.11.2012


Ответы (1)


Если вы используете HttpWebRequest/Response, это должно помочь вам начать:

response = null;

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("<url>");

    response = (HttpWebResponse)request.GetResponse();

    //no error
}
catch (WebException e)
{
    if (e.Status == WebExceptionStatus.ProtocolError)
    {
        response = (HttpWebResponse)e.Response;

        if((int)response.StatusCode == 500)
        {
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                var result = sr.ReadToEnd();
            }
        }
    }
}
person Chad    schedule 12.11.2012
comment
Спасибо, Чед, получилось. Я не использовал HttpWebRequest, я просто использовал WebClient. Это работает, хотя. - person Matt G; 12.11.2012
comment
Для всех, кто заинтересован, этот метод также можно использовать, если вы используете WebClient. Просто поймайте WebException и обработайте его, как указано выше. - person Falconne; 30.03.2018