我正在使用 CitectSCADA 的 CitectVBA 环境通过对象向 Twilio 的 Twimlets 服务器发出 POST 请求Msxml2.XMLHTTP
。在发现这与 Office 的 VBA v6 之间的一些差异之后,我确实设法得到了发出 POST 请求的东西。
Dim TwiMLURL As String
TwiMLURL = "http://twimlets.com/echo?Twiml=%3CResponse%3E%0A%3CSay%3EThis%20Is%20a%20test.%20Say%20Alarm%20Trip%20" _
& almNum &".%3C%2FSay%3E%0A%3C%2FResponse%3E&"
Dim http As Object
Set http = CreateObject("Msxml2.XMLHTTP")
http.Open "POST", GetCallURL(), False, ACCOUNTSID, AUTHTOKEN
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Dim postData As Variant
postData = "From=" & TwilioNumber _
& "&To=" & toNumber _
& "&Url=" & TwiMLURL
' send the POST data
Print postData
http.send postData
我现在遇到的问题是,我为Url
请求参数提供的输入对 XML 字符具有有效的 URL 编码,但我得到的响应表明这些代码作为其相应的 HTML 和号字符代码通过。
我上面代码的输出:
The thread 1 has started.
From=+15555556430&To=+15555551597&Url=http://twimlets.com/echo?Twiml=%3CResponse%3E%0A%3CSay%3EThis%20Is%20a%20test.%20Say%20Alarm%20Trip%20111.%3C%2FSay%3E%0A%3C%2FResponse%3E&
<?xml version='1.0' encoding='UTF-8'?><TwilioResponse><RestException><Code>21205</Code><Message>Url is not a valid url: http://twimlets.com/echo?Twiml=<Response><Say>This Is a test. Say Alarm Trip 111.</Say></Response></Message><MoreInfo>https://www.twilio.com/docs/errors/21205</MoreInfo><Status>400</Status></RestException></TwilioResponse>
The thread 1 has terminated.
关于翻译发生在哪里的任何想法?我非常接近能够让 Citect 呼叫操作员的电话并读取当前活动警报的代码!
更新:我刚刚通过Hurl.it运行了我的 POST 请求,并确认 Twilio 正确接收了它 - 呼叫通过我的手机并按请求读取了 Twimlet 编码的消息。所以问题出在Msxml2.XMLHTTP
. 关于我如何解决这个问题的任何想法?
更新 2: 编码“<” 和“>”同时通过 HTTP Post 发送 XML解决了最初的 POST 错误:我已经更新了我的请求标头。
http.setRequestHeader "Content-Type", "text/xml; charset=""utf-8"""
但是,现在我收到一条回复说没有指定“To”号码:
<?xml version='1.0' encoding='UTF-8'?><TwilioResponse><RestException><Code>21201</Code><Message>No 'To' number is specified</Message><MoreInfo>https://www.twilio.com/docs/errors/21201</MoreInfo><Status>400</Status></RestException></TwilioResponse>
我的电话号码格式为%2B15555556430
. 这里还有另一个编码问题吗?我什至不知道如何调查这次 Msxml2.XMLHTTP 发送的内容。
更新 3:问题出在 MSXML2.XMLHTTP 上。当我将我的帖子数据发送到httpbin.org/post以让它回显我发送的内容时,它会返回以下对象,具体取决于Content-Type
我选择的标头:
与text/xml; charset=""utf-8""
:
"args": {},
"data": "From=%2B15555556430&To=%2B15555551597&Url=http://twimlets.com/echo?Twiml=%3CResponse%3E%0A%20%20%3CSay%3EM%20G%20141%20E%20Q%20P%20S%20A%20Alarm%20Trip%20111%3C%2FSay%3E%0A%3C%2FResponse%3E&",
"files": {},
"form": {},
与application/x-www-form-urlencoded
:
"args": {},
"data": "",
"files": {},
"form": {
"From": "+15555556430",
"To": "+15555551597",
"Url": "http://twimlets.com/echo?Twiml=<Response>\n <Say>M G 141 E Q P S A Alarm Trip 111</Say>\n</Response>"
},
与application/json
:
"args": {},
"data": "From=%2B15555556430&To=%2B15555551597&Url=http://twimlets.com/echo?Twiml=%3CResponse%3E%0A%20%20%3CSay%3EM%20G%20141%20E%20Q%20P%20S%20A%20Alarm%20Trip%20111%3C%2FSay%3E%0A%3C%2FResponse%3E&",
"files": {},
"form": {},
我实际上尝试交换并得到完全相同的结果WinHttp.WinHttpRequest.5.1
。Msxml2.XMLHTTP
有什么想法吗?