【问题标题】:does httplib reuse TCP connections? [duplicate]httplib 是否重用 TCP 连接? [复制]
【发布时间】:2015-06-20 18:11:00
【问题描述】:

我正在使用 httplib 从网站获取大量资源,并且我希望以最低成本获得它,所以我在请求中设置了“连接:保持活动”HTTP 标头,但我不确定它是否真的使用相同的网络服务器允许的尽可能多的请求的 TCP 连接。

i = 0
    while 1:
        i += 1
        print i
        con = httplib.HTTPConnection("myweb.com")
        con.request("GET", "/x.css", headers={"Connection":" keep-alive"})
        result = con.getresponse()
        print result.reason, result.getheaders()

我的实现正确吗? 保活有效吗? 我应该把 'con = httplib.HTTPConnection("myweb.com")' 排除在外吗?

P.S:web服务器对keep-alive的响应是ok的, 我知道 urllib3

【问题讨论】:

  • @CrazyCasta:你为什么认为它是重复的? urllib2 使用 Connection: close 即一个请求 - 一个连接。 httplib 使用 HTTP/1.1,即默认情况下可以重用连接。相关:Persistence of urllib.request connections to a HTTP server
  • 如果你看这个问题,它是关于如何在 python 中执行多个 HTTP 请求。 urllib2 有点误导。如果您查看第一个答案,它具体与 httplib 有关。

标签: python httplib


【解决方案1】:

您的示例每次通过循环创建一个新的 TCP 连接,所以不,它不会重用该连接。

这个怎么样?

con = httplib.HTTPConnection("myweb.com")
while True:
    con.request("GET", "/x.css", headers={"Connection":" keep-alive"})
    result = con.getresponse()
    result.read()
    print result.reason, result.getheaders()

另外,如果您想要的只是标头,您可以使用 HTTP HEAD 方法,而不是调用 GET 并丢弃内容。

【讨论】:

  • 如果我们继续发送http请求,即使达到超时设置,服务器也永远不会关闭连接?
【解决方案2】:

如果你每次通过循环都废弃HTTPConnection对象,它肯定不能重用连接……

【讨论】:

  • 我将 httpconnection 创建放入循环中,以避免每次调用 request/getresponse 时读取数据。当我把它放在循环之外时,我监控了程序(通过wireshark),我不确定程序是如何工作的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多