C # - получение тела ответа от ошибки 403 - PullRequest
15 голосов
/ 23 марта 2011

Я получаю ошибку 403 при запросе данных с URL.Это ожидается, и я не спрашиваю, как это исправить.При вставке этого URL прямо в мой браузер я получаю базовую строку информации, объясняющую, почему в разрешении отказано.Мне нужно прочитать это основное сообщение об ошибке через мой код C #, однако при выполнении запроса выдается ошибка System.Net.WebException («Удаленный сервер возвратил ошибку: (403) Forbidden.»), И тело ответамне недоступно.

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

   HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(sPageURL);

   try
   {
        //The exception is throw at the line below.
        HttpWebResponse response = (HttpWebResponse)(request.GetResponse());

        //Snipped processing of the response.
   }
   catch(Exception ex)
   {
        //Snipped logging.
   }

Любая помощь будет принята с благодарностью.Спасибо.

Ответы [ 2 ]

30 голосов
/ 23 марта 2011

Вы ищете WebException.Response свойство:

catch(WebException ex)
{
     var response = (HttpWebResponse)ex.Response;
}
3 голосов
/ 06 июня 2015

Для меня это сработало ..

HttpWebResponse httpResponse;
            try
            {
                httpResponse = (HttpWebResponse)httpReq.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }
            }
            catch (WebException e)
            {
                Console.WriteLine("This program is expected to throw WebException on successful run." +
                                    "\n\nException Message :" + e.Message);
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                    using (Stream data = e.Response.GetResponseStream())
                    using (var reader = new StreamReader(data))
                    {
                        string text = reader.ReadToEnd();
                        Console.WriteLine(text);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...