Mam niedorzeczny czas próbując uzyskać działającą funkcję API SMS (ZeepMobile, jeśli jesteś zainteresowany) z .NET ... Byłem w sieci .NET od kilku lat, ale przy całej tej sieci społecznościowej i API, muszę trochę wejść w HttpWebRequest. Jestem w tym nowy, ale nie całkiem nowy; Udało mi się podłączyć moją stronę do Twittera bez zbytniego zamieszania (tj. Byłem w stanie zmodyfikować czyjś kod do pracy dla mnie).Obsługa błędów z HttpWebRequest.GetResponse
W każdym razie, sposób działania ich API polega na wysyłaniu wiadomości SMS, wysyłaniu ich do POST i odpowiedzi na nie. Mogę wysłać to dobrze, ale za każdym razem, zamiast powtarzać coś, co jest pomocne, aby dowiedzieć się, co jest błędem, dostaję Yellow Error Page Of Death (YEPOD) mówiąc coś do skutku "Zdalny serwer zwrócił error: (400) Złe żądanie. " Dzieje się tak na mojej linii:
'...creation of httpwebrequest here...'
Dim myWebResponse As WebResponse
myWebResponse = request.GetResponse() '<--- error line
Czy istnieje jakiś sposób, aby po prostu pojawić się błąd z serwera zamiast mieć serwer WWW wyjątek i dać mi YEPOD?
A może jeszcze ktoś może opublikować działający przykład swojego kodu Zeep? :)
Dzięki!
EDIT: Oto cały mój blok kodu:
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
ps, czy istnieje sposób, aby po prostu sprawdzić, jakiego nagłówki są zarówno wysyłania i odbioru? Próbuję użyć skrzypka, ale albo nie wiem, jak go użyć, albo jest całkowicie nieprzydatny ... – Jason
Proszę podać swój kod żądania – cdm9002
ps - dla tych, którzy próbują uzyskać twój kod ze strony do pracy, powyższy kod będzie zwraca 400 nieprawidłowych żądań: "Czas wiadomości różni się znacznie od zegara serwera lub nagłówek daty nie został dostarczony." Nadal nad tym pracuję, ponieważ nie możesz zmodyfikować nagłówka "Data" ... – Jason