代码之家  ›  专栏  ›  技术社区  ›  Corey Goldberg

HTTP请求超时

  •  2
  • Corey Goldberg  · 技术社区  · 17 年前

    在Python 2.6中,向httplib.HTTPConnection类添加了一个新的“timeout”参数: http://docs.python.org/library/httplib.html#httplib.HTTPConnection

    但是,这只是连接到服务器的超时。我正在寻找设置一个超时值 要求 ,而不是连接。httplib似乎不支持这一点。

    4 回复  |  直到 17 年前
        1
  •  9
  •   Tomalak    11 年前

    您可以设置全局套接字超时 :

    import socket
    
    timeout = 10
    socket.setdefaulttimeout(timeout)
    

    :正如评论中的人正确指出的那样:这在技术上是正确的,但对于涉及单个套接字操作的任务,它只有可预测的结果。HTTP请求由多个套接字操作组成(例如DNS请求或可能从HTTP客户端抽象出来的其他内容)。因此,整个操作的超时变得不可预测。

        2
  •  7
  •   mkoeller    17 年前

    这是因为 HTTP spec 不为客户端提供任何内容,以通过HTTP请求指定生存时间信息。正如您所提到的,您只能在TCP级别上执行此操作。

    408 Request Timeout 分别。 504 Gateway Timeout

        3
  •  5
  •   Pankrat    15 年前

    settimeout 在连接的套接字上(使用Python 2.5):

    connection = HTTPConnection('slow.service.com')
    connection.request(...)
    connection.sock.settimeout(5.0)
    response = connection.getresponse()
    response.read()
    connection.close()
    

    如果服务器无法在5秒内发送响应,则 socket.error 将被提出。

        4
  •  0
  •   Bob Baeck    8 年前

    connection = HTTPConnection(<IP of URL>, <port or None>, <timeout>)
    ...
    

    是以秒为单位的浮点。

    connection = HTTPConnection('slow.service.com', None, 20.0)
    
    推荐文章