0

我正在尝试使用 ColdFusion 运行一个简单的 REST api,并且无论尝试如何都收到相同的错误。使用 4 个参数,该调用在 Postman 中运行良好。但无法在 ColdFusion CFHTTP 中重新创建。

<cfhttp url="https://api.sandbox.scoutrfp.com/v3/contracts" method="GET" result="ITEM_INFO">
    <cfhttpparam type="header" name="X-Api-Key" value="#variables.API_KEY#">
    <cfhttpparam type="header" name="X-User-Token" value="#variables.USER_TOKEN#">
    <cfhttpparam type="header" name="Content-Type" value="application/vnd.api+json">
    <cfhttpparam type="header" name="X-User-Email" value="#variables.USER_EMAIL#"> 
</cfhttp>

我已将标题替换为 cgi 类型

<cfhttpparam type="CGI" encoded="false" name="Content_Type" value="application/vnd.api+json">

我已经添加了邮递员发送的所有临时标头。

总是相同的错误:JSON:API 的 Content-Type 标头丢失或不正确:预期的请求包括 'Content-Type: application/vnd.api+json

似乎 CFHTTP 标记未正确发送值“application/vnd.api+json” - 可能以某种方式对其进行了错误编码?是否有另一种方法通过 CFHTTP 发送此 Content-Type 以获得响应?

4

2 回答 2

0

在将方法更改为 POST 后使用 X-HTTP-Method-Override = GET 的额外标头有效。Curl 解决方案还可以在 cfexecute 之后和尝试读取使用返回的 api 内容写入的新创建文件之前插入。

 <cfhttp url="https://#variables.ENVIRONMENT#/v3/contracts" method="POST" result="ITEM_INFO">

            <cfhttpparam type="header" name="X-Api-Key" value="#variables.API_KEY#">
            <cfhttpparam type="header" name="X-User-Token" value="#variables.USER_TOKEN#">
            <cfhttpparam type="header" name="Content-Type" value="application/vnd.api+json">
            <cfhttpparam type="header" name="X-User-Email" value="#variables.USER_EMAIL#">
            <cfhttpparam type="header" name="X-HTTP-Method-Override" value="GET">
    </cfhttp>
于 2020-01-29T17:11:45.067 回答
0

内容类型 application/vnd.api+json 对于 ColdFusion 来说可能太新了。

通过 HTTP 发送内容类型标头的另一种方法是使用Curl

(代码中的意图是将结果保存在当前目录,即包含这个CFM文件的目录)

<!--- Use your own path to the Curl executable --->

<cfexecute name = "C:\bin\curl-7.35.0-win64\bin\curl.exe" 
     arguments = ' -H "X-Api-Key:#variables.API_KEY#" -H "X-User-Token:#variables.USER_TOKEN#" -H "Content-Type:application/vnd.api+json" -H  "X-User-Email:#variables.USER_EMAIL#" https://api.sandbox.scoutrfp.com/v3/contracts ' 
outputfile="#expandPath('.')#\ITEM_INFO.html" />
于 2020-01-28T05:58:15.803 回答