我正在尝试使用Lucee 4.5执行CFHTTP调用。我的主工作站上的测试代码是可以的(运行CF 10),但是当正确地复制到带有Lucee的笔记本电脑时,如果400失败了,错误的标头就会发送给。见下文
#XML Being Passed
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:Authenticate xmlns:m="http://foo.com/2005/">
<m:userName>xxxxx</m:userName>
<m:password>xxxxx</m:password>
</m:Authenticate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
#Partial Codebase; 'variable' is XML posted above
<cfhttp url="http://xxxxxxx?WSDL" method="post" result="theCFHTTP" compression="false">
<cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
<cfhttpparam type="HEADER" name="Accept" value="application/soap+xml, application/dime, multipart/related, text/*">
<cfhttpparam type="HEADER" name="User-Agent" value="Axis/1.1">
<cfhttpparam type="HEADER" name="Cache-Control" value="no-cache">
<cfhttpparam type="HEADER" name="Pragma" value="no-cache">
<cfhttpparam type="HEADER" name="SOAPAction" value="http://foo.com/2005/Authenticate">
<cfhttpparam type="HEADER" name="Content-Length" value="#len(soap)#">
<cfhttpparam type="xml" name="body" value="#soap#">
</cfhttp>
我对Lucee非常陌生,从未使用过Railo,所以如果有独特的字符集或其他需要完成的配置选项,我将非常感谢您的帮助。
编辑:进一步的测试已经确定我不能对笔记本之外的任何页面进行CFHTTP。所有外部URL都会给出400个错误的头消息。
我还添加了compression=false
,这样Lucee就不会自动将GZip内容发送到请求url。
我的工作机器的返回头:
失败机器的返回头:
5月19日编辑:
在基于Fabio的响应的CFHTTP调用中,我分别测试了以下每一项调整:
这两种方法都不起作用,尽管我的错误消息已更改为400坏请求。CFHTTP调用的转储显示我发送的XML无效,尽管独立的检查验证它实际上是有效的。它在令牌身份验证调用中失败了。
发布于 2015-04-27 04:55:49
我今天也遇到了同样的问题。终于,我明白了!
我使用tcpdump嗅探网络流量,看起来我们对IIS7的请求两次包含了内容类型标头,从而导致了丑陋
错误请求-无效的标头名称错误
问题在于身体参数:
<cfhttpparam type="xml" name="body" value="#soap#">
Lucee相应地将内容类型头设置为text/xml;utf-8.然后根据其他参数再次设置它:
<cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
你有两个选择:
https://stackoverflow.com/questions/29245212
复制相似问题