python3 HTTP请求需要很长时间

python3 HTTP请求需要很长时间,python,python-3.x,python-requests,urllib3,Python,Python 3.x,Python Requests,Urllib3,我正在使用请求库获取一个简单的URL(我在这里放置了一个虚拟URL,代码中使用了一个普通URL): 在本地,它可以正常工作,但当我在服务器上放置相同的代码时,这个请求将永远无法完成。我已经为所有这些记录器启用了日志输出: urllib3.util.retry urllib3.util urllib3 urllib3.connection urllib3.response urllib3.connectionpool urllib3.poolmanager requests 这是他们唯一的产出:

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

在本地,它可以正常工作,但当我在服务器上放置相同的代码时,这个请求将永远无法完成。我已经为所有这些记录器启用了日志输出:

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秒(如果忽略毫秒)。在本地,它是即时的


有什么线索告诉我下一步该去哪里吗?

这听起来像是底层IPv6连接有问题。请求只需2分10秒这一事实是一种让步,因为这表明IPv6请求超时

通过使用,例如,
wget
curl
进行验证:

wget——仅限inet6https://www.example.com -O->/dev/null
#或
curl--ipv6-vhttps://www.example.com
在这两种情况下,我们强制工具通过IPv6连接以隔离问题。如果超时,请重试强制IPv4:

wget——仅限inet4https://www.example.com -O->/dev/null
#或
curl--ipv4-vhttps://www.example.com
如果这工作正常,你已经发现了你的问题!但你会问,如何解决这个问题

  • 蛮力的解决方案是完全的
  • 你也可以只
  • 你可能只是想。(在链接的答案中,您必须调整代码以始终返回IPv4的
    socket.AF_INET
    。)
  • 如果您想解决SSH的这个问题,下面是如何解决的。(简而言之,将
    AddressFamily inet
    添加到您的SSH配置中。)
  • 您可能还想检查问题是否出在您的计算机上
  • 没有解决你的问题?
    如果这不能解决您的问题,我已经收集了一些其他可能的解决方案。

    文件的大小如何?您的服务器保证什么样的下游带宽,多少已经用于服务现有连接?服务器在下游带宽上的配置经常不足,尤其是面向主要提供静态内容的用户销售的服务器。如果从服务器上运行普通的
    wget
    ,它是否同样慢?这是个好主意!是的,wget同样慢,奇怪。它是一个Linode服务器,完全是空的和未使用的(除了操作系统本身)。该网站是一个相当普通、老式的网站。下载了40KB。鉴于
    wget
    也有同样的问题,可以肯定的是,这与Python(或编程)无关,与服务器的网络设置/配置有关。也许问问服务器故障?是的,我想我会这么做。谢谢
    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