coldfusion - cfhttp 返回浏览器可以通过 http 和 https 访问的网络 url 的连接失败
问题描述
我正在使用 cfhttp 尝试从我们的组织 API 中提取一些 json。当我尝试从我们自己的一台服务器中提取示例 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 没有问题。
- 我试过重新启动 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。所以我按照ColdFusion https 连接失败中提供的说明导入证书。这样做后,我按照说明验证证书是否已成功导入。然后我重新启动了 CF 服务器。
之后我再次运行我的代码并将 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>
解决方案
推荐阅读
- c# - 将数字列表 1、2、3、4 转换为字母列表 A、B、C、D
- javascript - html css中输入标签的下一行可以吗?
- probot - 如何使用 probot (octokit) 创建分支?
- python - Pandas ExcelWriter Openpyxl 正在创建一个必须恢复的损坏文件
- css - 在背景图像中使用 css 变量来改变颜色
- android - 如何从 kotlin 中的 arraylist 键和值创建数组?
- jupyter-notebook - 使用 nbconvert 将笔记本导出为 HTML 并为面板(散景、holoviews、hvplot)嵌入数据
- javascript - “选择”是 JavaScript 中的保留关键字吗?
- javascript - 如何仅在 Safari 中使用 userAgent 显示图像?
- python - 如何检查python代码的长度?