Comment puis-je lire la réponse d'une requête web lorsque l'État n'est pas 200?
Je vais avoir de la difficulté à obtenir le texte de la réponse à partir d'un web HTTP en demande vb.net quand je reçois une exception web.
C'est le code que j'ai fais avec.
Try
myWebResponse = CType(request.GetResponse(), HttpWebResponse)
myStreamReader = New StreamReader(myWebResponse.GetResponseStream())
ResponseText = myStreamReader.ReadToEnd
If myWebResponse.StatusCode = HttpStatusCode.Accepted Or myWebResponse.StatusCode = 200 Then
SendResult = True 'Sent
SendStatus = 1 'message sent successfully
Try
Integer.TryParse(myWebResponse.Headers("Number-Of-MT-PDU"), num_MT_PDU)
Catch ex As Exception
End Try
Else
SendStatus = 2 'message processed but not sent successfully
End If
Catch e As WebException
If (e.Status = WebExceptionStatus.ProtocolError) Then
Dim response As WebResponse = e.Response
Using (response)
Dim httpResponse As HttpWebResponse = CType(response, HttpWebResponse)
statusCode = httpResponse.StatusCode
Try
myStreamReader = New StreamReader(response.GetResponseStream())
Using (myStreamReader)
ResponseText = myStreamReader.ReadToEnd & "Status Description = " & HttpWebResponse.StatusDescription
End Using
Catch ex As Exception
Logger.LogError(Me, ex)
End Try
End Using
Ennuyant, l'API je suis contactant utilise une 404 comme une réponse valide. Si je mets de la demande dans un navigateur, un message texte sera affiché. Je veux être en mesure d'utiliser ce texte dans mon programme. Je ne peux pas tout simplement utiliser le code d'erreur pour déterminer les mesures que je ne pense pas que je peux faire la différence entre un valide réponse 404 et une erreur réelle.
Dans le code de cette ligne
myWebResponse = CType(request.GetResponse(), HttpWebResponse)
déclenche une exception.
À l'exception que je peux obtenir le code 404 et la description mais pas le flux de réponse. Il est toujours null.
Si je reçois une réponse 200-je obtenir le texte dans le flux de Réponse pas de problème.
Dans le web exception de la réponse de l'objet (dans Visual Studios débogueur) j'ai vérifié les en-têtes et les valeurs de l'objet et ne peut pas trouver le texte de la réponse de n'importe où. Si je colle l'URL dans un navigateur, je reçois la réponse du texte, même si c'est une erreur 404.
La crue de réponse dans un violon:
HTTP/1.1 404 Not Found Connection: close Content-Type: text/plain; charset=UTF-8 Content-Length: 35 "The response Message"
Des idées sur comment je peux obtenir "Le Message de réponse" dans mon programme? J'ai à utiliser .Net sur le serveur.
Merci pour toute aide, n'importe qui peut donner.
Je pense que j'ai eu le même problème avant. Ne pouvez pas utiliser webclient. Attendez, laissez-moi chercher.
J'ai demandé la même question stackoverflow.com/questions/9062089/.... Pas de réponse non plus.
Je viens de toucher localhost/test (qui n'existe pas) à l'aide de
WebClient.DownloadData
et la base WebException (je suis en utilisant DotLisp, il y a donc une BacktraceException et un TargetInvocationException "en haut".) Response
existe et l'équivalent de New StreamReader(response.GetResponseStream()).ReadToEnd
fonctionne très bien.OriginalL'auteur Ruairi O'Brien | 2011-08-22
Vous devez vous connecter pour publier un commentaire.
Ce LINQPad requête fonctionne très bien, le dumping le code HTML fourni par mon serveur web est "Pas Trouvé d'erreur" page web:
FYI Votre code fonctionne pour moi, à l'exception de la supposée faute de frappe re
HttpWebResponse.StatusDescription
(et de commenter "sans rapport avec les choses", à nouveau comme un LINQPad requête (dans .NET 4.0):J'ai également confirmé le code ci-dessus (avec le déduit
As
clauses ajoutées et la conversion de la.Dump
appels àConsole.WriteLine
).NET 2.0 avec VB8.Merci de cette réponse a été très utile
OriginalL'auteur Mark Hurd
Noter que la clé est que, même si la loi de GetResponseStream() renvoie une .NET WebException, HttpWebResponse est réellement passé à la WebException objet, quand, à la pêche, vous faites un nouveau GetResponseStream() sur le WebException.Réponse de l'objet.
Ci-dessous, très semblable code lors de la Capture de la première GetResponseStream()
OriginalL'auteur Marvin