2

当我在 Coldfusion 服务器中调用 canadaPost api 时,它给出了预期的响应。但是当我在 Lucee 服务器中使用相同的调用时,它会抛出消息失败。两个服务器的响应标头都是“Oracle-iPlanet-Web-Server/7.0”。但响应 mimetype 是 Lucee 服务器中的“application/octet-stream”和coldfusion 服务器中的“application/vnd.cpc.ship.rate-v3+xml”。

这是问题的原因吗?请就此提出您的建议。

这是我的代码:

<cfset local.url = "https://ct.soa-gw.canadapost.ca/rs/ship/price">

<cfhttp url="#local.url#" method="post" result="httpResponse" username="#variables.username#" password="#variables.password#">
    <cfhttpparam type="header" name="Accept" value="application/vnd.cpc.ship.rate-v3+xml"/>
    <cfhttpparam type="xml" value="#trim(xmlRequest)#"/>
    <cfhttpparam type="header" name="Content-type" value="application/vnd.cpc.ship.rate-v3+xml">
</cfhttp>

附上 Lucee 服务器上的截图:

在此处输入图像描述

谢谢

4

2 回答 2

1

Lucee(以及以前的 Railo)中存在一个错误,即<cfhttp>在使用 SSL 时不发送指定的用户名和密码属性。

要解决此问题,您可以使用<cfhttpparam>如下方式发送 Authorization 标头:

<cfhttp url="#local.url#" method="post" result="httpResponse">
    <cfhttpparam type="header" name="Accept" value="application/vnd.cpc.ship.rate-v3+xml"/>
    <cfhttpparam type="xml" value="#trim(xmlRequest)#"/>
    <cfhttpparam type="header" name="Content-type" value="application/vnd.cpc.ship.rate-v3+xml">
    <cfhttpparam type="header" name="Authorization" value="Basic #ToBase64( variables.username & ':' & variables.password )#">
</cfhttp>
于 2015-11-04T08:36:51.277 回答
1

最后,我通过将 cfhttpparam 类型“xml”更改为“body”来获得文件内容值。

我的修复:

<cfset local.url = "https://ct.soa-gw.canadapost.ca/rs/ship/price">
<cfhttp url="#local.url#" method="post" result="httpResponse" username="#variables.username#" password="#variables.password#">
    <cfhttpparam type="header" name="Accept" value="application/vnd.cpc.ship.rate-v3+xml"/>
    <cfhttpparam type="body" value="#trim(xmlRequest)#"/>
    <cfhttpparam type="header" name="Content-type" value="application/vnd.cpc.ship.rate-v3+xml">
</cfhttp>

谢谢大佬。。

于 2015-11-06T07:26:08.560 回答