通过 IPv6 与 IPv4 进行 API 连接

大家好,

我在及时访问 API 时遇到了问题。我正在访问以下 URL:

我已创建了 API 密钥和用户,目前一切正常。

当我使用正确的凭据在 Postman 中测试时,它会像预期那样立即返回数据。

问题出现在当我尝试从其他地方(比如我的代码)访问时。它需要几分钟才能返回,但最终确实会返回数据。

在终端中使用以下命令也会出现同样的问题:

wget --no-check-certificate --quiet \
  --method GET \
  --timeout=0 \
  --header 'Api-Key: correct-api-key-here' \
  --header 'Api-Username: <correct user name here>' \
   'https://community.tenxguitar.com/c/7.json'

这与我的 Python 代码表现一致。我不认为论坛上有会影响此问题的任何配置设置。能否请任何人提供建议或帮助?

谢谢!

Postman 和您的命令行示例代码是否都在同一台机器上运行?

尝试过使用 curl 进行第三次对比,而不是 wget 吗?

如果你在 wget 中添加 -4 选项,结果会立即返回吗?

如果不是,能否在添加 -v 选项后发布(脱敏后的)输出?

是的,它在同一台机器上。

Michael,

我尝试了 -4 选项(我之前不太熟悉这个选项),它立即按预期工作。随后我尝试了 -v 选项,如果我理解正确的话,看起来是 SSL 超时问题。以下是 -v 的输出。你能详细说明一下 -4 选项吗?谢谢!注意,由于发布链接的限制,我不得不删减了一些内容。

正在解析 community.tenxguitar.com (community.tenxguitar.com)… 2001:470:1:59e::139, 66.220.12.139
正在连接到
()|2001:470:1:59e::139|:443… 失败:连接超时。
正在连接到 ()|66.220.12.139|:443… 已连接。
HTTP 请求已发送,等待响应… 200 OK
长度:未指定 [application/json]
正在保存到:‘7.json.4’

您的机器目前同时配置了 IPv4 和 IPv6 地址,但您的 IPv6 连接已损坏,通过 IPv6 的连接尝试会超时。

wget(以及可能您的 Python 代码)会先尝试 IPv6,等待超时后再通过 IPv4 成功连接。但使用 -4 强制使用 IPv4 时就能正常工作。

Postman 可能仅使用 IPv4,或者它正在同时尝试 IPv4 和 IPv6,并使用最先建立连接的协议

您需要调查为什么您的网络上 IPv6 连接无法工作。即使它们立即失败也更好,因为这样 wget 会知道立即尝试 IPv4,而无需等待 IPv6 超时。

(或者,强制您的连接仅使用 IPv4)

谢谢先生!这很有趣。我会去了解一下。再次感谢。