18 votes

C# - Obtenir le corps de la réponse d'une erreur 403

Je reçois une erreur 403 lorsque je demande des données à partir d'une URL. C'est normal et je ne demande pas comment y remédier.
En collant cette URL directement dans mon navigateur, j'obtiens une chaîne d'informations de base décrivant la raison pour laquelle l'autorisation est refusée.
J'ai besoin de lire ce message d'erreur de base via mon code C#, mais lorsque la requête est effectuée, une erreur System.Net.WebException ("Le serveur distant a renvoyé une erreur : (403) Forbidden.") est lancée, et le corps de la réponse n'est pas disponible pour moi.

Est-il possible de saisir simplement le contenu de la page sans que l'exception soit levée ? Le code correspondant est à peu près celui auquel on s'attend, mais le voici quand même.

   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.
   }

Toute aide serait appréciée. Merci de votre compréhension.

34voto

SLaks Points 391154

Vous recherchez le WebException.Response propriété :

catch(WebException ex)
{
     var response = (HttpWebResponse)ex.Response;
}

4voto

nikunjM Points 412

Cela a fonctionné pour moi.

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);
            }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X