通过CFHTTP在SOAP Web服务请求中发现404 Not Found错误

时间:2016-10-13 22:53:54

标签: coldfusion

我在使用会员数据库的Web服务时遇到了很多麻烦。使用SoapUI时,我从SOAP信封中获得了有效的结果。但是当我尝试使用CFHTTP和CF9发送相同的信封时(我知道,我知道),我得到了一个" 404 Not Found"无论我尝试做什么都会出错。在浏览器中访问URL会给我一个"访问被拒绝"错误。

以下是我在cfsavecontent中的内容:

<cfsavecontent variable="soapBody">
    <cfoutput>
    <?xml version=“1.0” encoding=“utf-8”?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://membersuite.com/schemas" xmlns:con="http://membersuite.com/contracts">
       <soapenv:Header>
         <sch:ConciergeRequestHeader>
         <!--Optional:-->
         <sch:BrowserId></sch:BrowserId>
         <!--Optional:-->
         <sch:SessionId></sch:SessionId>
         <sch:AccessKeyId>MyAccessKey</sch:AccessKeyId>
         <!--Optional:-->
         <sch:AssociationId>MyAssociationID</sch:AssociationId>
         <sch:Signature>MySignature</sch:Signature>
         </sch:ConciergeRequestHeader>
       </soapenv:Header>
       <soapenv:Body>
          <con:LoginToPortal>
            <!--Optional:-->
            <con:portalUserName>username</con:portalUserName>
            <!--Optional:-->
            <con:portalPassword>password</con:portalPassword>
          </con:LoginToPortal>
       </soapenv:Body>
    </soapenv:Envelope>
    </cfoutput>
</cfsavecontent>

这是我的cfhttp:

<cfhttp url="https://soap.membersuite.com/mex" method="post" useragent="#CGI.http_user_agent#">
  <cfhttpparam type="header" name="charset" value="utf-8">
  <cfhttpparam type="header" name="mimetype" value="application/xml" /> 
  <cfhttpparam type="header" name="content-type" value="text/xml">
  <cfhttpparam type="header" name="SOAPAction" value="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" />
  <cfhttpparam type="header" name="accept-encoding" value="no-compression" />
  <cfhttpparam type="header" name="content-length" value="#len(trim(soapBody))#">
  <cfhttpparam type="xml" name="soapenv" value="#trim(soapBody)#" /> 
</cfhttp>

转储cfhttp给了我这个错误:

enter image description here

我觉得远程服务器告诉我它无法找到我要求的内容。但它是正确的端点,我可以在WSDL中看到它:

<wsdl:operation name="LoginToPortal">
    <wsdl:input wsaw:Action="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" message="tns:IConciergeAPIService_LoginToPortal_InputMessage"/>
    <wsdl:output wsaw:Action="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortalResponse" message="tns:IConciergeAPIService_LoginToPortal_OutputMessage"/>
</wsdl:operation>

我还将Web服务页面的SSL证书添加到我的CF keystone;错误消息没有变化。我在我的智慧结束,并将不胜感激任何建议!再次,我通过SoapUI获得预期的结果。非常感谢你们!

1 个答案:

答案 0 :(得分:1)

严格关闭SoapUI请求,如果目标网址更改为https://soap.membersuite.com/,它似乎有效。使用伪造凭证,响应将更改为“指定的无效访问密钥ID”而不是404。

<cfhttp url="https://soap.membersuite.com/" method="post" useragent="#CGI.http_user_agent#">
  <cfhttpparam type="header" name="Content-Type" value="text/xml; charset=utf-8" /> 
  <cfhttpparam type="header" name="SOAPAction" value="http://membersuite.com/contracts/IConciergeAPIService/LoginToPortal" />
  <cfhttpparam type="header" name="Accept-Encoding" value="no-compression" />
  <cfhttpparam type="header" name="Content-Length" value="#len(trim(soapBody))#">
  <cfhttpparam type="body" value="#trim(soapBody)#" /> 
</cfhttp>