Les Erreurs de manipulation de HttpWebRequest.GetResponse
Je vais avoir un ridicule de temps à essayer d'obtenir une API SMS de travail (ZeepMobile, si vous êtes intéressé).NET... j'ai été autour de .NET pour quelques années, mais avec tous ces réseaux sociaux et de l'API truc, j'ai besoin d'entrer dans les HttpWebRequest un peu. Je suis nouveau à cela, mais pas tout à fait nouvelle; j'ai pu brancher mon site de Twitter, sans trop de chichi (c'est à dire, j'ai été en mesure de modifier quelqu'un du code du travail pour moi).
De toute façon, le chemin de leur API travaille est d'envoyer un SMS, envoyer un message et ils répondre de nouveau à vous. Je peux vous l'envoyer, mais à chaque fois que je le fais, plutôt que de renvoyer quelque chose d'utile pour comprendre quelle est l'erreur, j'obtiens le Jaune de la Page d'Erreur De Mort (YEPOD) de dire quelque chose à l'effet de "Le serveur distant a retourné une erreur: (400) Bad Request." Cela se produit sur ma ligne:
'...creation of httpwebrequest here...'
Dim myWebResponse As WebResponse
myWebResponse = request.GetResponse() '<--- error line
Est-il possible de simplement recevoir le message d'erreur du serveur, plutôt que d'avoir le serveur web renvoie une exception et me donner le YEPOD?
Ou, mieux encore, quelqu'un peut-il poster un exemple de travail de leurs Zeep code? 🙂
Merci!
EDIT: Voici mon tout bloc de code:
Public Shared Function SendTextMessage(ByVal username As String, _
ByVal txt As String) As String
Dim content As String = "user_id=" + _
username + "&body=" + Current.Server.UrlEncode(txt)
Dim httpDate As String = DateTime.Now.ToString("r")
Dim canonicalString As String = API_KEY & httpDate & content
Dim encoding As New System.Text.UTF8Encoding
Dim hmacSha As New HMACSHA1(encoding.GetBytes(SECRET_ACCESS_KEY))
Dim hash() As Byte = hmacSha.ComputeHash(encoding.GetBytes(canonicalString))
Dim b64 As String = Convert.ToBase64String(hash)
'connect with zeep'
Dim request As HttpWebRequest = CType(WebRequest.Create(_
"https://api.zeepmobile.com/messaging/2008-07-14/send_message"), HttpWebRequest)
request.Method = "POST"
request.ServicePoint.Expect100Continue = False
' set the authorization levels'
request.Headers.Add("Authorization", "Zeep " & API_KEY & ":" & b64)
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = content.Length
' set up and write to stream'
Dim reqStream As New StreamWriter(request.GetRequestStream())
reqStream.Write(content)
reqStream.Close()
Dim msg As String = ""
msg = reqStream.ToString
Dim myWebResponse As WebResponse
Dim myResponseStream As Stream
Dim myStreamReader As StreamReader
myWebResponse = request.GetResponse()
myResponseStream = myWebResponse.GetResponseStream()
myStreamReader = New StreamReader(myResponseStream)
msg = myStreamReader.ReadToEnd()
myStreamReader.Close()
myResponseStream.Close()
' Close the WebResponse'
myWebResponse.Close()
Return msg
End Function
Veuillez fournir votre code de la demande
ps - pour ceux qui veulent obtenir votre zeep code du travail, le code ci-dessus sera de retour à 400 Bad Request: "heure du Message diffère beaucoup de l'horloge du serveur ou de la Date de l'en-tête n'a pas été fourni." Je travaille encore sur ce que, puisque vous ne pouvez pas modifier la "Date" de l'en-tête...
OriginalL'auteur Jason | 2009-07-16
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Version C#
Voici votre code, modifié un peu:
Dumping en-têtes:
Déjà là. Désolé
que signifie "à l'Aide de" faire en VB? jamais vu ça avant...
ok j'ai eu la version de visual basic de travail et j'ai été capable de lire le message d'erreur... comme un bonus, est-il possible de lire ma SORTIE les en-têtes et tout avant/pendant qu'il est envoyé?
À l'aide de "l'aide" en C# il permet de s'assurer que la méthode dispose est appelée sur ce qui est à l'intérieur, donc le premier permet de s'assurer de la réponse.Dispose est appelé, même si il y a une exception. Je suis sur le point de publier une version modifiée de votre code.
OriginalL'auteur
Je pense que c'est normal pour un
WebException
être levée lorsque la requête retourne une 4xx ou 5xx code. Vous avez juste besoin de l'attraper et de les traiter de manière appropriée.Avez-vous regardé le
Headers
collection après l'appel àGetResponse
?De la 400 "bad request" code d'erreur, je suppose que l'exception a été levée en réponse à une erreur de l'autre serveur. Ne serait pas une erreur dans votre code provoquer un 500?
avez-vous de code pour vérifier les en-têtes? j'ai essayé beaucoup de choses, maintenant, ma tête est en tourbillonnant... merci 🙁
Je suis sûr que je pourrais trouver quelque chose, mais je suis également sûr que je ne suis pas autorisé à poster, désolé. Si vous obtenez un WebException, alors l'erreur envoyé à partir de l'autre serveur doit être en WebException.Réponse et vous pouvez trouver les en-têtes dans WebException.Réponse.Les en-têtes. Si vous obtenez une réponse en cas de succès, les en-têtes seront en myWebResponse.Les en-têtes. Je ne me souviens pas si demande.Les en-têtes est rempli avec ceux qui ont été réellement envoyé, ou seulement utilisé pour spécifier votre propre pour être ajouté.
OriginalL'auteur