Содержимое файла ответа API пусто на сервере Lucee
Когда я вызываю api canadaPost на сервере Coldfusion, который дает ожидаемый ответ. Но когда я использую тот же вызов на сервере Lucee, он выдает сообщение об ошибке. Заголовок ответа "Oracle-iPlanet-Web-Server/7.0" для обоих серверов. Но mimetype ответа - это "application / octet-stream" на сервере Lucee и "application/vnd.cpc.ship.rate-v3+xml" на сервере coldfusion.
Это причина проблемы? Пожалуйста, дайте ваше предложение по этому поводу.
Вот мой код:
<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:
Спасибо
2 ответа
Наконец, я получил значение содержимого файла, изменив тип 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>
Спасибо, парень.
В Lucee (и ранее Railo) есть ошибка, из-за которой атрибуты имени пользователя и пароля указываются в <cfhttp>
не отправляются при использовании SSL.
Чтобы обойти это, вы можете отправить заголовок авторизации, используя <cfhttpparam>
следующее:
<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>