LuceeSOAP400错误;在CF中工作正常

LuceeSOAP400错误;在CF中工作正常,soap,cfml,lucee,Soap,Cfml,Lucee,我正在尝试使用Lucee4.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/

我正在尝试使用Lucee4.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>
正在传递XML xxxxx xxxxx #部分代码基变量“”是上面发布的XML 我是Lucee的新手,从未使用过Railo,因此如果需要完成独特的字符集或其他配置选项,我将非常感谢您的帮助

编辑:进一步的测试确定我无法将CFHTTP发送到笔记本电脑本身之外的任何页面。所有外部URL都会给出400个错误的头消息

我还添加了
compression=false
,这样Lucee就不会自动将GZip内容发送到请求url

我的工作机器的返回标题:

  • 字符集:utf-8
  • 标题:HTTP/1.1 200 OK缓存控制:私有,最大年龄=0内容类型:text/xml;charset=utf-8服务器:Microsoft IIS/8.0 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET日期:2015年3月25日星期三14:58:03 GMT连接:关闭内容长度:603
  • Mimetype:text/xml
发生故障的计算机的返回标头:

  • 字符集:美国ascii码
  • 标题:HTTP/1.1 400错误请求内容类型:text/html;charset=us ascii服务器:Microsoft HTTPAPI/2.0日期:2015年3月25日星期三15:06:18 GMT连接:关闭内容长度:339
  • Mimetype:text/html
5月19日编辑:

我根据Fabio的响应在CFHTTP调用中分别测试了以下各项调整:

  • 我删除了内容类型头参数,或者
  • 将body参数从“xml”更改为“body”

  • 两者都不起作用,尽管我的错误消息已更改为400错误请求。CFHTTP调用的转储表明我发送的是无效的XML,尽管独立检查验证它实际上是有效的。令牌身份验证调用失败。

    我今天也遇到了同样的问题。终于,我明白了

    我使用tcpdump嗅探网络流量,它看起来像我们对IIS7的请求包含了两次内容类型头,从而导致了丑陋的结果

    错误的请求-无效的标头名称错误

    问题出在body参数中:

    <cfhttpparam type="xml" name="body" value="#soap#">
    
    <cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
    
    
    
    Lucee将相应的内容类型头设置为text/xml;utf-8。。。然后根据其他参数再次设置:

    <cfhttpparam type="xml" name="body" value="#soap#">
    
    <cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
    
    
    
    你有两个选择:

  • 将type=“xml”保留在cfhttpparam标记上,并删除显式的MIME+charset参数
  • 将type=“xml”更改为type=“body”,并手动设置所有标题

  • 因为你有一个有效的和一个无效的。我会启动您的网络监控工具(浏览器工具也可以这样做),并比较从工作服务器和非工作服务器发送的头。然后报告您看到的内容,我们将从那里开始。我添加了您的请求。我们对请求头更感兴趣,因为它们可能是导致问题的原因。你能比较一下这些,包括你发现的吗。故障机器和internet之间是否有防火墙、代理服务器或其他任何东西?你能使用浏览器浏览到同一台机器上的网站吗?没有防火墙或代理(SOAP请求在我的个人笔记本电脑上工作),在浏览器中查看时,我调用的网站确实存在。我将尝试获取请求头。它不起作用。请查看我编辑的帖子。如果我必须手动设置标题,我会做什么更改?我已经在指定它们了,不是吗?没错,我还需要手动设置它们。不要做两次:把type=XML改成type=BODY,你就完了。法比奥,你这个混蛋帮我省了一大堆活儿!!!如何假设type=“xml”也设置了内容类型头。。。非常感谢你!