大家好,
我在及时访问 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 代码表现一致。我不认为论坛上有会影响此问题的任何配置设置。能否请任何人提供建议或帮助?
谢谢!
Richie
(Richie Rich)
2
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)