Vbscript 附加到内容类型的ServerXMLHTTP

Vbscript 附加到内容类型的ServerXMLHTTP,vbscript,asp-classic,http-headers,Vbscript,Asp Classic,Http Headers,我正在使用VBScript中的JSON正文发出服务器端HTTP请求,如下所示: Set oXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP") oXMLHttp.open cMethod, cAPIURL, False, cUser, cPassword oXMLHttp.setRequestHeader "Content-Type", "application/json" oXMLHttp.send(cData) cReturn = oXM

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

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
将不使用头。例如

oXMLHttp.setRequestHeader "Content-Type", "application/json; Charset=FOO"
工作正常,不受影响。如何阻止
MSXML2.ServerXMLHTTP
更改内容类型

编辑:我发现MSXML2.serverxmlhttp6.0至少在默认情况下没有表现出这种行为。但我仍然想看看是否有解决方案,因为我不确定在需要安装此应用程序的地方是否可以使用


Set-oXMLHttp=Server.CreateObject(“MSXML2.ServerXMLHTTP.6.0”)

根据文档,当请求主体为字符串时,这是方法的预期行为。顺便说一句,我应该说我不能在Windows10和WindowsServer2008R2上重现这个问题,但是WindowsServer2008。因此,我唯一能说的是,这种行为必须对MSXML 3.0的旧版本有效。


如果输入类型是BSTR,则响应始终编码为UTF-8。 调用方必须使用适当的内容设置内容类型标头 键入并包含一个字符集参数

如果输入类型是XMLDOM对象,则对响应进行编码 根据
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