如何将此 XML 请求发送到我的服务器并让它发送到另一台服务器并从中获取响应
How can I send this XML request to my server and have it send to and get a response from another server
我的情况是我需要从安装在多个用户工作站上的桌面应用程序向用户验证服务器发送 XML 请求。验证服务器有严格的白名单策略,因此他们不会接受来自 IP 可能经常变化的多个用户的请求。
我认为解决方案是让我的桌面应用程序将 XML 请求发送到我的 coldfusion 网络服务器,我的网络服务器以某种方式将其发送到验证服务器,然后将响应发送回桌面应用程序。我不知道如何做到这一点,而且我对网络服务器的控制很少,他们对我们可以放在那里的内容非常严格。
通过 HTTPS 的请求非常简单:
<?xml version ="1.0"?>
<cspinput appID="asdfasdf" appPassword="asdf1234" >
<account userid="johndoe" action="authenticate">
<password>mypasswd1234</password>
</account>
</cspinput>
和响应:
<?xml version ="1.0"?>
<cspoutput returnCode="0">
<account userid="johndoe" action="authenticate">
<returnValue>True</returnValue>
</account>
</cspoutput>
需要说明的是,我的问题是如何通过我的服务器和验证服务器获取此 XML。我需要使用什么或者我需要创建可以做到这一点的东西吗?我可以访问 ColdFusion/ASP Web 服务器。
首先,您可以使用 cfsavecontent 将 xml 内容保存到一个变量,然后通过 cfhttp post 该变量。检查一下:http://www.bennadel.com/blog/745-posting-xml-with-coldfusion-cfhttp-and-cfhttpparam.htm.
那么您来自服务器的响应将是您可以使用 XMLParse (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6e90.html) 解析的内容,然后使用在该页面上找到的点表示法(或地图表示法)来获取您的响应值。
试试这个...
首先,保存数据包。
<cfsavecontent variable="theXMLPacket">
<cspinput appID="asdfasdf" appPassword="asdf1234" >
<account userid="johndoe" action="authenticate">
<password>mypasswd1234</password>
</account>
</cspinput>
</cfsavecontent>
然后我们使用cfhttp post它到处理服务器。
<cfhttp method="post" url="https://someurl.com/endpoint" result="xmlResult">
<cfhttpparam type="xml" value="#XMLParse(theXMLPacket)#" />
</cfhttp>
然后处理结果
<cfif structKeyExists(xmlResult.responseHeader,"status_code") AND xmlResult.responseHeader.status_code EQ 200>
<!--- request was successful --->
<cfoutput>#XMLParse(xmlResult.Filecontent)#</cfoutput>
<cfelse>
<!--- request failed --->
<cfdump var="#xmlResult#" />
</cfif>
请注意,XML 声明 ( ) 已从数据包中删除,作为无效字符在它可能导致 java 错误之前。
我的情况是我需要从安装在多个用户工作站上的桌面应用程序向用户验证服务器发送 XML 请求。验证服务器有严格的白名单策略,因此他们不会接受来自 IP 可能经常变化的多个用户的请求。
我认为解决方案是让我的桌面应用程序将 XML 请求发送到我的 coldfusion 网络服务器,我的网络服务器以某种方式将其发送到验证服务器,然后将响应发送回桌面应用程序。我不知道如何做到这一点,而且我对网络服务器的控制很少,他们对我们可以放在那里的内容非常严格。
通过 HTTPS 的请求非常简单:
<?xml version ="1.0"?>
<cspinput appID="asdfasdf" appPassword="asdf1234" >
<account userid="johndoe" action="authenticate">
<password>mypasswd1234</password>
</account>
</cspinput>
和响应:
<?xml version ="1.0"?>
<cspoutput returnCode="0">
<account userid="johndoe" action="authenticate">
<returnValue>True</returnValue>
</account>
</cspoutput>
需要说明的是,我的问题是如何通过我的服务器和验证服务器获取此 XML。我需要使用什么或者我需要创建可以做到这一点的东西吗?我可以访问 ColdFusion/ASP Web 服务器。
首先,您可以使用 cfsavecontent 将 xml 内容保存到一个变量,然后通过 cfhttp post 该变量。检查一下:http://www.bennadel.com/blog/745-posting-xml-with-coldfusion-cfhttp-and-cfhttpparam.htm.
那么您来自服务器的响应将是您可以使用 XMLParse (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6e90.html) 解析的内容,然后使用在该页面上找到的点表示法(或地图表示法)来获取您的响应值。
试试这个...
首先,保存数据包。
<cfsavecontent variable="theXMLPacket">
<cspinput appID="asdfasdf" appPassword="asdf1234" >
<account userid="johndoe" action="authenticate">
<password>mypasswd1234</password>
</account>
</cspinput>
</cfsavecontent>
然后我们使用cfhttp post它到处理服务器。
<cfhttp method="post" url="https://someurl.com/endpoint" result="xmlResult">
<cfhttpparam type="xml" value="#XMLParse(theXMLPacket)#" />
</cfhttp>
然后处理结果
<cfif structKeyExists(xmlResult.responseHeader,"status_code") AND xmlResult.responseHeader.status_code EQ 200>
<!--- request was successful --->
<cfoutput>#XMLParse(xmlResult.Filecontent)#</cfoutput>
<cfelse>
<!--- request failed --->
<cfdump var="#xmlResult#" />
</cfif>
请注意,XML 声明 ( ) 已从数据包中删除,作为无效字符在它可能导致 java 错误之前。