0

这个问题一直让我发疯,希望有人知道答案,因为我找不到一个搜索。

我正在尝试使用以下内容在我们的旧版 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 调用。然后它将返回一个 JSON 结果,该结果稍后会被解析出来。

我从wireshark中得到的反馈如下:

WireShark 结果

所有正确的数据都在那里...

当我在发送(或解码 .responseBody)之后查看 xmlHttpRequest.responseText 时,我得到以下信息:

ResponseText : "{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualif"

每次截断为 429 个字符

这是被发回的内容类型:Content-Type → application/json;字符集=utf-8

难道我做错了什么?或者它是图书馆中的一个错误?我还尝试了 WinHTTP 5.1 并得到了确切的结果。

从我在 stackoverflow 上看到的所有其他示例中,人们在他们的 wireshark 分析中也丢失了数据。就我而言,我看到所有正确的数据都被返回,所以我只是不明白为什么它会被截断。

提前感谢您对此的任何帮助!

编辑:我使用编码深入挖掘 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 时仍然没有得到完整的结果集

4

1 回答 1

0

这是 vb6 调试器本身的限制。如果我输出到消息框或文件,即使它实际上存在,它也没有显示完整的响应。

使用 MSXML2.ServerXMLHTTP 从网页访问数据返回 Lua 中截断的数据有助于得出这个结论

于 2015-02-23T20:27:49.850 回答