我正在使用网络服务(由于保密,我无法透露姓名)。在获取wsdl页面之前,Web服务要求我使用用户名和密码登录。例如,如果我在Web服务器中输入服务URL,则会提示我输入登录信息。
所以,我假设需要首先验证自己,然后使用wsdl。
但是,我编写了一些测试代码,这些代码消耗了w3schools Celsius到Fahrenheit服务,这些服务不需要身份验证并且运行正常。
<!--- soap request in xml --->
<cfsavecontent variable="soap">
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://www.w3schools.com/webservices/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<SOAP-ENV:Body>
<tns:CelsiusToFahrenheit xmlns:tns="http://www.w3schools.com/webservices/">
<tns:Celsius>34</tns:Celsius>
</tns:CelsiusToFahrenheit>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</cfsavecontent>
<!---Sending a post request accessing the defined SOAPAction CelsiusToFahrenheit--->
<cfhttp url="http://www.w3schools.com/webservices/tempconvert.asmx" method="post" result="httpresponse">
<cfhttpparam type="header" name="content-type" value="text/xml">
<cfhttpparam type="header" name="SOAPAction" value="""http://www.w3schools.com/webservices/CelsiusToFahrenheit""">
<cfhttpparam type="header" name="content-length" value="#len(soap)#">
<cfhttpparam type="header" name="charset" value="utf-8">
<cfhttpparam type="xml" name="message" value="#trim(soap)#">
</cfhttp>
<!---Output the result if http status is 200 (we can do error handling also) --->
<cfif find( "200", httpresponse.statusCode )>
<cfset soapResponse = xmlParse(httpresponse.fileContent) />
<cfset responseNodes = xmlSearch(soapResponse, "//*[ local-name() = 'CelsiusToFahrenheitResult' ]") />
<cfoutput>Fahrenheit: #responseNodes[ 1 ].xmlText#</cfoutput>
</cfif>
无论如何,我可以通过调整来请求经过身份验证的Web服务吗?请注意这个问题可能有些模糊。但是,如果您需要更多信息,请发表评论告诉我。
编辑:当我为我的网络服务调整代码时,它说我有一个握手失败。
编辑:添加了wsdl文件(更改了命名空间):[dump] http://dumptext.com/vy7Fj2da
答案 0 :(得分:5)
有几个原因可能会导致握手失败:
如果您使用的是ColdFusion 9或更早版本,则需要发送SSLv2客户端Hello进行握手。很可能是因为新的PCI规则,另一方关闭了,这就是你失败的原因。您可以选择解决此问题:
另一方有一个SSL证书,您需要在ColdFusion存储中安装该证书才能成功建立连接。像这样: