Umgang mit Fehlern von HttpWebRequest.GetResponse
Bin ich mit einer lächerlichen Zeit versuchen, um eine SMS-API arbeiten (ZeepMobile, wenn Sie interessiert sind).NET... hab ich schon .NETZ für ein paar Jahre, aber mit alle diese social-networking-und API-Sachen, die ich brauche, um in die HttpWebRequest ein bisschen. Ich bin neu, aber nicht ganz neu; ich war in der Lage, um hook up meine Website auf Twitter, ohne allzu viel Firlefanz (also, ich war in der Lage zu ändern jemand den code für mich zu arbeiten).
Egal, wie Sie Ihre API funktioniert ist der SMS-Nachricht zu senden, senden Sie Sie ein nach und Sie reagieren auf Sie zurück. Ich kann senden Sie es nur gut, aber jedes mal, wenn ich es Tue, eher als echo zurück etwas hilfreich, um herauszufinden, was der Fehler ist, ich bekomme die Gelbe Fehler-Seite Des Todes (YEPOD) sagte etwas zum Effekt von "Der Remoteserver hat einen Fehler zurückgegeben: (400) ungültige Anforderung." Dies geschieht auf meiner Linie:
'...creation of httpwebrequest here...'
Dim myWebResponse As WebResponse
myWebResponse = request.GetResponse() '<--- error line
Gibt es eine Möglichkeit, einfach die Fehlermeldung aus dem server anstatt der webserver eine Ausnahme und gib mir die YEPOD?
Oder noch besser, kann mir jemand die post-ein Beispiel für Ihre Zeep-code? 🙂
Dank!
EDIT: Hier ist mein gesamter code-block:
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
Bitte geben Sie Ihren Wunsch-code
ps - für diejenigen, die versuchen, um Ihre zeep-code zu arbeiten, der obige code wird zurückgeben 400 Bad Request: die Nachricht "der Zeit unterscheidet sich zu viel vom server clock oder Date-header wurde nicht angegeben." Noch auf Arbeit, da können Sie nicht ändern Sie die "Date" - header...
InformationsquelleAutor Jason | 2009-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
C# - version
Hier ist dein code ein bisschen modifiziert:
Dumping-Header:
Bereits dort. Sorry
was bedeutet "Mit" tun in VB? nie gesehen...
ok, ich habe die VB-version arbeiten, und ich war in der Lage, um die Fehlermeldung Lesen... als bonus gibt es eine Möglichkeit, zu Lesen, mein OUTPUT Header und alles vor dem/, wie es verschickt wird?
Die Verwendung ist wie "mit" in C# - stellt sicher, dass die Dispose-Methode aufgerufen wird, auf das, was von innen, also der erste stellt sicher, dass Antwort.Dispose aufgerufen wird, auch wenn es eine Ausnahme. Ich freue mich über post eine geänderte version des Codes.
InformationsquelleAutor John Saunders
Ich denke, es ist normal für einen
WebException
geworfen werden, wenn die Anforderung gibt eine 4xx oder 5xx-code. Sie müssen nur, es zu fangen und entsprechend behandeln.Haben Sie schaute auf die
Headers
Sammlung nach dem Aufruf vonGetResponse
?Von den 400 "bad request" - Fehler code bin ich davon ausgegangen, dass die exception geworfen wurde, in Reaktion auf eine Fehlermeldung, auf dem anderen server. Wäre das nicht einen Fehler im code verursachen, ein 500?
Sie haben aktuelle code für die überprüfung Header? ich habe versucht, so viele Dinge, die jetzt durch meinen Kopf wirbelt... danke 🙁
Ich bin sicher, ich könnte etwas finden, aber ich bin ebenso sicher, dass ich nicht posten darf, sorry. Wenn Sie nicht bekommen, eine WebException, dann der eigentliche Fehler wurde von den anderen server sollte in WebException.Antwort und Sie können die Kopfzeilen, für die es im WebException.Antwort.Header. Wenn Sie eine erfolgreiche Antwort, der Header wird in myWebResponse.Header. Ich erinnere mich nicht, wenn Anfrage.Header ausgefüllt ist mit denen, die wurden eigentlich geschickt, oder nur verwendet, um Sie Ihre eigenen Hinzugefügt werden.
InformationsquelleAutor Tim Sylvester