首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加到内容类型的ServerXMLHTTP

附加到内容类型的ServerXMLHTTP
EN

Stack Overflow用户
提问于 2016-01-26 19:38:28
回答 1查看 5.2K关注 0票数 3

我在VBScript中使用JSON体发出服务器端HTTP请求,如下所示:

代码语言:javascript
复制
Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open cMethod, cAPIURL, False, cUser, cPassword
oXMLHttp.setRequestHeader "Content-Type", "application/json"
oXMLHttp.send(cData)
cReturn = oXMLHttp.responseText
Set oXMLHttp = Nothing

我调用的服务期望内容类型自然是application/json。正如您所看到的,我正在将上面的请求头设置为这样。

问题是,无论我将内容类型设置为什么,MSXML2.ServerXMLHTTP都会附加一个字符集(我找不到这种行为的文档),默认的是UTF-8。因此,最终,头以application/json; Charset=UTF-8的形式发送,web服务不喜欢这样做。

奇怪的是,我可以使用setRequestHeader显式地设置一个字符集,甚至是一个荒谬的字符集,然后MSXML2.ServerXMLHTTP会将头单独放在一边。例如..。

代码语言:javascript
复制
oXMLHttp.setRequestHeader "Content-Type", "application/json; Charset=FOO"

工作得很好,没有被碰过。如何阻止MSXML2.ServerXMLHTTP更改内容类型?

编辑:我发现MSXML2.ServerXMLHTTP6.0没有显示这种行为,至少在默认情况下是这样的。但是我仍然想知道是否有解决方案,因为我不确定在需要安装这个应用程序的地方是否有这个解决方案。

Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-26 22:18:20

根据文档,当请求体为字符串时,这是发送方法的预期行为。顺便说一句,我不能在Windows10和Windows 2008 R2上重现这个问题,但是Windows 2008。因此,我唯一能说的是,这种行为对于旧版本的MSXML3.0必须有效。

备注

如果输入类型是BSTR,则响应总是被编码为UTF-8。调用方必须设置具有适当内容类型的内容类型标头,并包含一个字符集参数。 如果输入类型是XMLDOM对象,则响应将根据<?文档中的XML声明。 如果没有XML声明或编码属性,则假定为如果输入类型是UI1的SAFEARRAY,则响应按原样发送,不需要额外编码。调用方必须使用适当的内容类型设置内容类型标头。

作为解决办法,您可以发送字节的cData,而不是指向变量。这对所有人都有好处。

代码语言:javascript
复制
Function Utf8BytesOf(text)
    With Server.CreateObject("Adodb.Stream")
        .Charset = "UTF-8"
        .Open
        .WriteText text
        .Position = 0
        .Type = 1 'adTypeBinary
        .Read 3 'skip UTF-8 BOM
        Utf8BytesOf = .Read 'read rest
        .Close
    End With
End Function

Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
oXMLHttp.open cMethod, cAPIURL, False, cUser, cPassword
oXMLHttp.setRequestHeader "Content-Type", "application/json"
oXMLHttp.send Utf8BytesOf(cData)
cReturn = oXMLHttp.responseText
Set oXMLHttp = Nothing
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35022415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档