Эта проблема сводила меня с ума, надеюсь, кто-то знает ответ, так как я не мог найти ни одного, ищущего вокруг.
Я пытаюсь получить доступ к веб-службе в одном из наших устаревших приложений vb6 со следующим:
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)
По сути, он выполняет вызов api с параметром TradingPartnerName со значением (в данном случае DSSI). Затем он вернет результат JSON, который позже будет проанализирован.
Посмотрев на wirehark, я получил следующее:
Все нужные данные есть ...
Когда я смотрю на xmlHttpRequest.responseText после отправки (или декодирования .responseBody), я получаю следующее:
ResponseText : "{"$id":"1","TradingPartnerInformation":{"$id":"2","$values":[{"$id":"3","TradingPartnerKey":1,"TpName":"DSSI","SenderIdQualifier":"12","SenderId":"(removed)","ReceiverIdQualif"
Каждый раз он обрезается до 429 символов.
Вот тип контента, который отправляется обратно: Content-Type → application / json; charset = utf-8
Я делаю что-то неправильно? Или это ошибка в библиотеке? Я также пробовал с WinHTTP 5.1 и получил точный результат.
Из всех других примеров, которые я видел на stackoverflow, людям также не хватало данных в их анализе wirehark. В моем случае я вижу, что возвращаются все правильные данные, поэтому я просто не понимаю, почему они усекаются.
Заранее благодарим за любую помощь с этим!
РЕДАКТИРОВАТЬ: Я играл с кодировкой, углубляясь в предложение 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