У меня есть нелепое время, пытаясь заставить работать с API-интерфейсом SMS (ZeepMobile, если вам интересно) с .NET ... Я уже несколько лет вокруг .NET, но со всеми этими социальными сетями и материалами API, мне нужно немного входить в HttpWebRequest. Я новичок в этом, но не совсем новый; Я смог подключить свой сайт к Twitter без лишней суеты (т. Е. Мне удалось изменить чей-то код для работы на меня).Обработка ошибок из HttpWebRequest.GetResponse
В любом случае, как их работает API, необходимо отправить SMS-сообщение, отправив им POST, и они ответят вам. Я могу отправить его просто отлично, но каждый раз, когда я делаю, вместо того, чтобы отсылать назад что-то полезное, чтобы выяснить, что такое ошибка, я получаю желтую страницу ошибки смерти (YEPOD), говорящую о том, что «Удаленный сервер вернул Ошибка: (400) «Плохой запрос». Это происходит на моей линии:
'...creation of httpwebrequest here...'
Dim myWebResponse As WebResponse
myWebResponse = request.GetResponse() '<--- error line
Есть ли способ, чтобы просто получить сообщение об ошибке с сервера, а не иметь веб-сервер сгенерирует исключение и дать мне YEPOD?
Или еще лучше, может ли кто-нибудь опубликовать рабочий пример своего кода Zeep? :)
Спасибо!
EDIT: Вот весь мой код блока:
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
пс, есть способ, чтобы просто посмотреть, что заголовки имеют как отправлять и получать? я пытаюсь использовать скрипач, но либо я не знаю, как его использовать, либо просто совершенно бесполезно ... – Jason
Просьба представить ваш код запроса – cdm9002
ps - для тех, кто пытается заставить ваш код zeep работать, приведенный выше код будет return 400 Bad Request: «Время сообщения отличается от времени сервера, или заголовок Date не был предоставлен». Все еще работаю над этим, так как вы не можете изменить заголовок «Дата» ... – Jason