【问题标题】:python3 HTTP request taking a long timepython3 HTTP请求需要很长时间
【发布时间】:2018-11-10 22:14:22
【问题描述】:

我正在使用 requests 库来获取一个简单的 URL(我在这里放了一个虚拟 URL,代码中使用的是普通 URL):

import requests
response = requests.get("http://example.com/foo/bar/", headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"})

在本地它工作正常,但是当我将相同的代码放在我的服务器上时,这个请求需要很长时间才能完成。我已经为所有这些记录器启用了日志输出:

urllib3.util.retry
urllib3.util
urllib3
urllib3.connection
urllib3.response
urllib3.connectionpool
urllib3.poolmanager
requests

这是他们产生的唯一输出:

2018-05-31 19:55:56,894 - urllib3.connectionpool - DEBUG - Starting new HTTP connection (1): example.com
2018-05-31 19:58:06,676 - urllib3.connectionpool - DEBUG - http://example.com:80 "GET /foo/bar/ HTTP/1.1" 200 None

有趣的是,完成请求总是需要 2 分 10 秒(如果您忽略毫秒)。在本地是即时的。

我接下来应该去哪里寻找线索?

【问题讨论】:

  • 被拉取的文件有多大?你的服务器保证什么样的下行带宽,有多少已经用于服务现有连接?服务器在下游带宽上经常配置不足,尤其是面向主要提供静态内容的人销售的服务器。如果你从服务器运行一个普通的wget,它是否同样慢?
  • 好主意!是的,wget 同样慢,很奇怪。它是一个 Linode 服务器,完全为空且未使用(操作系统本身除外)。该网站是一个相当普通的老式网站。下载了 40KB。
  • 鉴于wget 有同样的问题,可以肯定这与 Python(或根本编程)无关,而与服务器的网络设置/配置有关。也许在 Server Fault 处询问?
  • 是的,我想我会这样做的。谢谢!

标签: python python-3.x python-requests urllib3


【解决方案1】:

这听起来像是底层 IPv6 连接存在问题。请求恰好花费了 2 分 10 秒这一事实是一个放弃,因为这表明 IPv6 请求超时。

使用例如wgetcurl 进行验证:

wget --inet6-only https://www.example.com -O - > /dev/null
# or
curl --ipv6 -v https://www.example.com

在这两种情况下,我们都会强制该工具通过 IPv6 连接以隔离问题。如果超时,请再次尝试强制 IPv4:

wget --inet4-only https://www.example.com -O - > /dev/null
# or
curl --ipv4 -v https://www.example.com

如果一切正常,您就找到了问题!但是你问怎么解决呢?

  1. 蛮力解决方案是完全disable IPv6
  2. 您也只能disable IPv6 for the current session
  3. 您可能只想force requests to use IPv4。 (在链接的答案中,您必须调整代码以始终为 IPv4 返回 socket.AF_INET。)
  4. 如果你想为 SSH 解决这个问题,这里是force IPv4 for SSH 的方法。 (简而言之,将 AddressFamily inet 添加到您的 SSH 配置中。)
  5. 您可能还想检查问题是否出在您的DNS or TCP

没有解决您的问题?

如果那没有解决您的问题,我已经收集了一些其他可能的解决方案here

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 2020-03-19
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多