3

对此的任何帮助将不胜感激;我已经在这几天了。

以下是我到目前为止的代码;不幸的是,当我运行它时,我收到了 HTTP 415 错误;无法处理消息,因为内容类型为 'text/xml; charset=UTF-8' 不是预期的类型 'application/soap+xml; 字符集=utf-8'

我必须发送 application/soap+xml 的内容类型,因为这是 Web 服务允许的唯一类型;我必须用经典的 ASP 来做。

我尝试将“发送”行更改为“objRequest.send objXMLDoc.XML”,但这给了我一个HTTP 400 错误请求错误。


strXmlToSend = "<some valid xml>"
webserviceurl = "http://webservice.com"
webserviceSOAPActionNameSpace = "avalidnamespace"

Set objRequest = Server.createobject("MSXML2.XMLHTTP.3.0")
objRequest.open "POST", webserviceurl, False

objRequest.setRequestHeader "Content-Type", "application/soap+xml"
objRequest.setRequestHeader "CharSet", "utf-8"
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate"
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate"

Set objXMLDoc = Server.createobject("MSXML2.DOMDocument.3.0")
objXMLDoc.loadXml strXmlToSend
objRequest.send objXMLDoc
set objXMLDoc = nothing
4

2 回答 2

3

这是我过去成功使用的:

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    xmlhttp.open "POST", url, false
    xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    xmlhttp.setRequestHeader "SOAPAction", "http://www.mydomain.com/myaction" 
    xmlhttp.send postdata
    xml = xmlhttp.responseText
于 2010-01-07T12:33:40.297 回答
3

当您将 XML DOM 传递给 send 方法时,Content-Type 始终设置为“text/xml”。

如果要控制内容类型,则必须传递一个字符串。不要仅仅为了调用 xml 属性而将 XML 字符串加载到 DOM 中,因为这可能会更改 xml 声明的内容。顺便说一句,XML 字符串中的 xml 声明是什么样的,您确定 xml 是正确的吗?xml 声明上的编码(如果存在)应为“UTF-8”。

不要发送标头CharSet没有任何意义,CharSet 是 Content-Type 标头的一个属性。

不要在 ASP 内部使用 XMLHTTP,它不安全。

因此,您的代码应如下所示:-

strXmlToSend = "<some valid xml>" 
webserviceurl = "http://webservice.com" 
webserviceSOAPActionNameSpace = "avalidnamespace" 

Set objRequest = Server.Createobject("MSXML2.ServerXMLHTTP.3.0") 
objRequest.open "POST", webserviceurl, False 

objRequest.setRequestHeader "Content-Type", "application/soap+xml; charset=UTF-8" 
objRequest.setRequestHeader "action", webserviceSOAPActionNameSpace & "GetEstimate" 
objRequest.setRequestHeader "SOAPAction", webserviceSOAPActionNameSpace & "GetEstimate" 

objRequest.send strXmlToSend 

不确定那个“动作”标题对我来说似乎是多余的。也许这仍然会以某种方式失败,但它不应该再抱怨 Content-Type 标头了。

于 2010-01-07T18:07:02.110 回答