缺少 responseText 信息(vb6 调用)
Missing responseText Information (vb6 call)
这个问题一直让我抓狂,希望有人知道答案,因为我四处搜索都找不到。
我正在尝试使用以下内容访问我们的一个旧版 vb6 应用程序中的 Web 服务:
Dim xmlHttpRequest As MSXML2.ServerXMLHTTP
Dim xmlParameters As String
Dim timeOutValue As Long
timeOutValue = 300 * 1000&
xmlParameters = "TradingPartnerName=" + inTradingPartnerName
Set xmlHttpRequest = New MSXML2.ServerXMLHTTP
xmlHttpRequest.Open "POST", urlString, False
xmlHttpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttpRequest.setRequestHeader "Host", "xa-2k8:2016/"
xmlHttpRequest.setTimeouts timeOutValue, timeOutValue, timeOutValue, timeOutValue
xmlHttpRequest.sEnd (xmlParameters)
它本质上是使用参数 "TradingPartnerName" 和一个值(在本例中为 "DSSI")调用 api。然后它将 return 一个 JSON 结果稍后被解析出来。
我从 wireshark 得到的结果如下:
所有正确的数据都在那里...
当我在发送(或解码 .responseBody)后查看 xmlHttpRequest.responseText 时,我得到以下信息:
ResponseText : "{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualif"
每次截断429个字符
这是发回的内容类型:
内容类型 → application/json;字符集=utf-8
我是不是做错了什么?还是库中的错误?我还尝试使用 WinHTTP 5.1 并获得了准确的结果。
从我在 Whosebug 上看到的所有其他示例来看,人们在他们的 wireshark 分析中也丢失了数据。在我的例子中,我看到所有正确的数据都被 returned,所以我只是不明白为什么它被截断了。
在此先感谢您的帮助!
编辑:
我对编码进行了更深入的研究 GSerg 的建议...发现当我将 responseBody 从二进制转换为字符串时,使用不同的解码类型会产生不同的结果。
使用以下方法:
Function BinaryToString(ByVal Binary)
BinaryToString = ""
Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1 '--- adTypeBinary
BinaryStream.Open
BinaryStream.Write Binary
BinaryStream.Position = 0
BinaryStream.Type = 2 '--- adTypeText
BinaryStream.Charset = (UTF-8 or ASCII)
BinaryToString = BinaryStream.ReadText
End Function
如果我创建字符集 "UTF-8",我会得到以下信息:
"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQua
如果我创建字符集 "ASCII",我会得到以下信息:
"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualifier":"12","ReceiverId":"(removed)","ElementSeparator":"*","SubElementSea"
所以,看起来是编码问题,但切换到 ASCII 时仍然没有得到完整的结果集
这是 vb6 调试器本身的限制。如果我输出到消息框或文件,它没有显示完整的响应,即使它实际上在那里。
帮助得出这个结论
这个问题一直让我抓狂,希望有人知道答案,因为我四处搜索都找不到。
我正在尝试使用以下内容访问我们的一个旧版 vb6 应用程序中的 Web 服务:
Dim xmlHttpRequest As MSXML2.ServerXMLHTTP
Dim xmlParameters As String
Dim timeOutValue As Long
timeOutValue = 300 * 1000&
xmlParameters = "TradingPartnerName=" + inTradingPartnerName
Set xmlHttpRequest = New MSXML2.ServerXMLHTTP
xmlHttpRequest.Open "POST", urlString, False
xmlHttpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttpRequest.setRequestHeader "Host", "xa-2k8:2016/"
xmlHttpRequest.setTimeouts timeOutValue, timeOutValue, timeOutValue, timeOutValue
xmlHttpRequest.sEnd (xmlParameters)
它本质上是使用参数 "TradingPartnerName" 和一个值(在本例中为 "DSSI")调用 api。然后它将 return 一个 JSON 结果稍后被解析出来。
我从 wireshark 得到的结果如下:
所有正确的数据都在那里...
当我在发送(或解码 .responseBody)后查看 xmlHttpRequest.responseText 时,我得到以下信息:
ResponseText : "{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualif"
每次截断429个字符
这是发回的内容类型: 内容类型 → application/json;字符集=utf-8
我是不是做错了什么?还是库中的错误?我还尝试使用 WinHTTP 5.1 并获得了准确的结果。
从我在 Whosebug 上看到的所有其他示例来看,人们在他们的 wireshark 分析中也丢失了数据。在我的例子中,我看到所有正确的数据都被 returned,所以我只是不明白为什么它被截断了。
在此先感谢您的帮助!
编辑: 我对编码进行了更深入的研究 GSerg 的建议...发现当我将 responseBody 从二进制转换为字符串时,使用不同的解码类型会产生不同的结果。
使用以下方法:
Function BinaryToString(ByVal Binary)
BinaryToString = ""
Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1 '--- adTypeBinary
BinaryStream.Open
BinaryStream.Write Binary
BinaryStream.Position = 0
BinaryStream.Type = 2 '--- adTypeText
BinaryStream.Charset = (UTF-8 or ASCII)
BinaryToString = BinaryStream.ReadText
End Function
如果我创建字符集 "UTF-8",我会得到以下信息:
"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQua
如果我创建字符集 "ASCII",我会得到以下信息:
"{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualifier":"12","ReceiverId":"(removed)","ElementSeparator":"*","SubElementSea"
所以,看起来是编码问题,但切换到 ASCII 时仍然没有得到完整的结果集
这是 vb6 调试器本身的限制。如果我输出到消息框或文件,它没有显示完整的响应,即使它实际上在那里。
帮助得出这个结论