Я использую cfhttp, чтобы попытаться получить json из API одной из наших организаций. У меня работает код при попытке получить пример json с одного из наших собственных серверов, но когда я указываю его на сам API, я получаю сообщение об ошибке соединения. Это код:
<cfhttp method="get" url="http://[url]/api/menu">
<cfhttpparam type="URL" name="id" value="[guid]">
</cfhttp>
<cfset FileWrite("#application.tempDirPath#/temp.json", CFHTTP.FileContent)>
Я заменил реальные значения на [url] и [guid].
Я попытался получить доступ к этому URL-адресу в браузере по адресу https://[url]/api/menu?id=[guid], и он работает отлично, указывая на то, что у моей машины нет проблем с доступом к этому URL-адресу. URL-адрес — это сервер в нашей сети, к которому я могу получить доступ, пока я пользуюсь корпоративной VPN.
Что я пробовал:
- Живой код должен указывать на https. Пробовал и http и https.
- Я попытался перейти на домашнюю страницу по тому же URL-адресу, и это также приводит к сбою подключения, но работает в браузере.
- Я попробовал тот же код с http://www.google.com, и он загружает HTML-код Google без проблем.
- Я попытался перезапустить ColdFusion и свою машину.
Я попытался отключить сжатие через заголовки:
<cfhttp method="get" url="http://[url]/api/menu"> <cfhttpparam type="header" name="Accept-Encoding" value="deflate;q=0" /> <cfhttpparam type="header" name="TE" value="deflate;q=0" /> <cfhttpparam type="URL" name="id" value="[guid]"> </cfhttp>
У меня нет доступа к целевому серверу. Я могу обратиться за помощью к тем, у кого есть доступ, но их вывод на данный момент таков: «это проблема ColdFusion», поэтому я не уверен, какую помощь я могу получить. Это делает невозможным проверку правил брандмауэра или ограничений пользовательского агента; предложения о способах проверки этих вещей на местном уровне будут приветствоваться.
Изменить
В комментариях к этому вопросу я определил, что http просто перенаправляется на https по этому адресу. Поэтому я следовал инструкциям, приведенным в разделе https://stackoverflow.com/questions/20469194/coldfusion-https-connection-failure, чтобы импортировать сертификат. После этого я следовал инструкциям, чтобы убедиться, что сертификат был успешно импортирован. Затем я перезапустил CF Server.
После этого я снова запустил свой код и выгрузил всю структуру cfhttp во временный файл. Это был результат:
<?xml version="1.0" encoding="UTF-8"?>
<STRUCT ID="1">
<ENTRY NAME="Errordetail" TYPE="STRING">I/O Exception: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target</ENTRY>
<ENTRY NAME="Mimetype" TYPE="STRING">Unable to determine MIME type of file.</ENTRY>
<ENTRY NAME="Statuscode" TYPE="STRING">Connection Failure. Status code unavailable.</ENTRY>
<ENTRY NAME="Filecontent" TYPE="STRING">Connection Failure</ENTRY>
<ENTRY NAME="Responseheader" TYPE="STRUCT">
<STRUCT ID="2" />
</ENTRY>
<ENTRY NAME="Text" TYPE="BOOLEAN">true</ENTRY>
<ENTRY NAME="Charset" TYPE="STRING" />
<ENTRY NAME="Header" TYPE="STRING" />
</STRUCT>
http://[url]/
перенаправляет наhttps://[url]/
?cfhttp
следует перенаправлениям по умолчанию, возможно, попадая в сертификат. Попробуйте использовать<cfhttp redirect="false" method=...
, чтобы увидеть, установлено ли соединение даже на HTTP-порте по умолчанию. - person Alex   schedule 02.01.2020