从命令行连接到站点

从命令行连接到站点

我可以连接到以下 https://registry.terraform.io/.well-known/terraform.json 使用浏览器

当我尝试从命令行连接它时

curl:(7)无法连接到 registry.terraform.io 端口 443:超时

任何关于如何解决这个问题的想法,谢谢

答案1

问题在于命令窗口 HTTPS_PROXY=浏览器的代理设置上的代理设置不正确

答案2

总结

尝试curl步骤 7 中列出的命令。如果该命令不起作用,则除了curl命令之外,您可能还遇到了其他问题(例如防火墙或代理)。

使用 cURL 复制浏览器请求

如果您可以使用浏览器连接,消除curl命令潜在问题的一种方法是从浏览器中“复制”所需的交易。Chrome、Firefox 和 Opera 都具有允许执行此操作的开发者控制台。

  1. 打开一个新的空白标签。

  2. 在 Chrome 和 Firefox 中,按F12打开开发者控制台。在 Opera 中,按Ctrl+ Shift+ I

  3. 查找Network选项并选择它。

  4. 导航到您想要的 URL,例如https://registry.terraform.io/.well-known/terraform.json

  5. 您最终应该会看到类似以下内容的内容:

    例如网络交易

    Firefox 开发者控制台 - 网络交易 - 屏幕截图

  6. 选择所需的交易,右键单击并选择选项Copy as cURL(对于 Chrome,使用Copy as cURL (cmd))。

    例如复制为 cURL

    Firefox 开发者控制台 - 网络事务 - 复制为 cURL - 屏幕截图

  7. 如果您粘贴剪贴板的内容,您应该会得到以下请求的精确副本curl

    curl "https://registry.terraform.io/.well-known/terraform.json" -H "authority: registry.terraform.io" -H "upgrade-insecure-requests: 1" -H "user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" -H "sec-fetch-mode: navigate" -H "accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3" -H "sec-fetch-site: none" -H "accept-encoding: gzip, deflate, br" -H "accept-language: en-US,en;q=0.9" --compressed
    

curl命令应该准确复制浏览器发出的请求。

其他事宜

假设这不能解决问题,那么您将必须调查此请求失败的其他原因,例如防火墙/代理问题或证书问题。

  • 使用-k--insecure选项来忽略 curl 的自签名或无效证书。

  • 考虑使用--verbose标志以及转储 HTTP 标头来-D -帮助curl进行故障排除。


模拟特定浏览器

根据您的补充评论,您的(通用)cURL 请求仍然失败,很可能您需要模拟可以成功连接的特定浏览器。

浏览器使用用户代理与该浏览器的给定版本关联的字符串。如果您想模拟可以连接到您的 URL 的浏览器,您需要:

  1. 使用下面给出的步骤使用 cURL 复制浏览器请求在浏览器中即可成功连接。

  2. 尝试将user-agent步骤 7 中的值替换为从类似网站返回的值我的浏览器是什么(使用可以顺利访问您的链接的浏览器访问此链接)。

示例(选项 2)

“通用”用户代理(以上)

-H "user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"

特定用户代理(例如来自我的浏览器是什么)

-H "user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0"

值得注意的是,第一种方法(复制请求)可能是最可靠的,因为它可能会捕获user-agent用于授权请求的其他标头。


相关内容