ColdFusion Rest API для SCOUT - Тип содержимого: application / vnd.api + json - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь запустить простой REST API с ColdFusion и получаю ту же ошибку независимо от попытки. Вызов прекрасно работает в Почтальоне с 4 параметрами. Но не могу воссоздать в 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">

Я добавил все временные заголовки, которые отправляет почтальон.

Всегда одна и та же ошибка: Отсутствует или неправильный заголовок Content-Type для JSON: API: Ожидаемый запрос на включение 'Content-Type: application / vnd.api + json

Кажется тег CFHTTP неправильно отправляет значение "application / vnd.api + json" - возможно, оно каким-то образом неправильно кодируется? Существуют ли другие способы отправки этого типа контента через CFHTTP для получения ответа?

Ответы [ 2 ]

0 голосов
/ 29 января 2020

с использованием дополнительного заголовка для X-HTTP-Method-Override = GET после изменения метода на POST сработало. Решение 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>
0 голосов
/ 28 января 2020

application-type-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" />
...