【问题标题】:How to stay alive in HTTP/1.1 using python urllib如何使用 python urllib 在 HTTP/1.1 中保持活力
【发布时间】:2013-07-10 16:53:13
【问题描述】:

现在我正在这样做:(Python3,urllib)

url = 'someurl'
headers = '(('HOST', 'somehost'), /  
            ('Connection', 'keep-alive'),/
            ('Accept-Encoding' , 'gzip,deflate'))
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
for h in headers:
    opener.addheaders.append(x)
data = 'some logging data' #username, pw etc.
opener.open('somesite/login.php, data)

res = opener.open(someurl)
data = res.read()
... some stuff here...
res1 = opener.open(someurl2)
data = res1.read()
etc.

这是怎么回事;

我不断收到来自服务器的 gzip 响应并且我保持登录状态(我正在获取一些如果我没有登录则不可用的内容)但我认为每个请求 opener.open 之间的连接正在断开;

我认为这是因为连接速度很慢,而且似乎每次都有新的连接。两个问题:

a)我如何测试连接实际上是否保持活动/死亡
b)如何让它在请求其他 url 之间保持活跃?

保重:)

【问题讨论】:

  • a) 嗅探流量将是检查您是否保持活动状态的一种简单方法。确保服务器也支持keepalive。至于b),至少在python2.x中有一种方法可以指定一个可以keepalive的handler,但是好像不是默认的。
  • 嗯,首先这是python3,另一个线程中推荐的这个urlgrabber应该是2.5和之前的,其次我宁愿避免使用外部库来完成这个看似简单的任务;特别是因为我想了解这些事情是如何运作的

标签: python http keep-alive


【解决方案1】:

这将是一个非常延迟的答案,但是:

您应该看到urllib3。它适用于 Python 2.x,但是当您看到他们的 README 文档时您就会明白。

是的,默认情况下 urllib 不会保持连接,我现在正在为 Python 3 实现 urllib3 以留在我的工具包中:)

【讨论】:

    【解决方案2】:

    如果您还不知道,python-requests 提供了 keep-alive 功能,这要归功于 urllib3。

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 2015-09-12
      • 2014-05-24
      • 1970-01-01
      • 2016-04-01
      • 2021-08-19
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多