Python比urllib更好的网络API

时间:2011-08-25 13:36:51

标签: python network-programming

我注意到没有办法在urllib中关闭连接(关闭不起作用)。是否有更好的更强大的python网络API?

5 个答案:

答案 0 :(得分:4)

对于urllib的问题,你并不孤单。 Python社区已经提出了一些替代方案

试试这里:

http://pypi.python.org/pypi/requests

请求是关于urllib的理智API

http://urlgrabber.baseurl.org/

Urlgrabber是urllib的高速重写,支持高级HTTP下载功能。

答案 1 :(得分:1)

Urllib在完成urlopen后关闭连接,fp.close()只关闭filebuffer,它保存检索到的信息:

>>> import urllib
>>> fp = urllib.urlopen('http://www.httpbin.org/ip')
>>> fp.read()
0: '{"origin": "::ffff:92.242.181.219"}'
>>> fp.close()

有很多好的http库:

  • requests - 简单的http-client,围绕urlib2 / httplib构建
  • tornado asyncclient - 非常轻巧的异步接口,主要用于发出简单的REST请求。
  • pycurl - 最快,最强大的网络库,支持其他协议,还有curls模块,移植到tornadogevent

  • 我正在为这些库构建分析器:source - 还会有速度和内存比较。

另一种选择:

答案 2 :(得分:0)

答案 3 :(得分:0)

要关闭连接,可以使用with语句。这样,您可以确保正确关闭连接,即使出现异常也可以关闭。参见this以获得更好的解释

答案 4 :(得分:-1)

由于尚未提及:httplib2很棒(虽然其中一个重点是重用持久(保持活动)连接而不是关闭它们)

至于关闭连接:你想要实现的是什么?

如果您希望在请求后关闭连接(或者更确切地说,在获得响应后),则可以在请求中添加Connection: close标头。 (见http spec)。这将导致服务器关闭连接(如果它至少是一个表现良好的服务器。我认为使用httplib2这也将导致连接被客户端关闭,以防服务器没有按预期运行。我不喜欢不知道其他的libs)