gpt4 book ai didi

python - HTTPConnection.request 不遵守超时?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:05 26 4
gpt4 key购买 nike

我正在尝试使用 HTTPConnection (2.7.8) 发出请求,并且我已使用 HTTPConnection(host, timeout=10) 将超时设置为 10 >。但是,HTTPConnection.request() 似乎不会在 10 秒后超时。事实上,HTTPConnection.timeout 甚至似乎都没有被 HTTPConnection.request() 读取(它只被 HTTPConnection.connect()。我的理解是否正确?timeout 是否仅适用于 connect() 而不适用于 request()?有没有办法超时 请求()?

更新:

我想我已经进一步缩小了问题的范围:如果我不提供该方案,它就不会遵守套接字超时。如果提供了方案,即完整的 URL 为 http://google.com:22222,那么它将相应地超时。我想知道为什么该计划的存在会有所作为。也就是说,以下不遵守超时

    socket.setdefaulttimeout(3)
conn = HTTPConnection('google.com:22222')
conn.timeout = 3
conn.request('GET', '')

然而,这样做:

    socket.setdefaulttimeout(3)
conn = HTTPConnection('http://google.com:22222')
conn.timeout = 3
conn.request('GET', '')

但是,并非所有域都会发生这种情况。

谢谢

最佳答案

以下代码大约需要 30 秒才能失败:

#!/usr/bin/env python2
from httplib import HTTPConnection

conn = HTTPConnection('google.com', 22222, timeout=2)
conn.request('GET', '')

如果将 ip 传递给 HTTPConnection 而不是主机名,则会按预期在 2 秒内引发超时错误:

#!/usr/bin/env python2
import socket
from httplib import HTTPConnection

host, port = 'google.com', 22222
ip, port = socket.getaddrinfo(host, port)[0][-1]
conn = HTTPConnection(ip, port, timeout=2)
conn.request('GET', '')

解释同ftplib.FTP timeout has inconsistent behaviour :超时可能会限制单个套接字操作,但它没有说明 HTTPConnection() 调用本身的持续时间,它可能会尝试 getaddrinfo() 返回的多个 IP 地址和超时仅限制单个套接字操作。合并多个操作可能需要更长的时间。

您的 HTTPConnection('http://google.com:22222') 很快就会失败,因为 url 参数不正确:它应该是 host主机:端口。绝对 urlrequest() 方法接受——尽管即使在那里它也有特殊的含义——通常,您只需提供路径,例如 '/'.

关于python - HTTPConnection.request 不遵守超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com