发布于 2013-02-11 08:32:09
我知道已经说过了,但我强烈推荐requests Python包。
如果你使用过python以外的语言,你可能会认为urllib和urllib2很容易使用,代码不多,而且功能强大,这就是我过去的想法。但是requests包是如此的有用和简短,每个人都应该使用它。
首先,它支持完全restful API,并且非常简单:
import requests
resp = requests.get('http://www.mywebsite.com/user')
resp = requests.post('http://www.mywebsite.com/user')
resp = requests.put('http://www.mywebsite.com/user/put')
resp = requests.delete('http://www.mywebsite.com/user/delete')不管是GET / POST,你都不必再编码参数了,它只需接受一个字典作为参数,就可以使用了:
userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://www.mywebsite.com/user', data=userdata)此外,它甚至还有一个内置的JSON解码器(同样,我知道json.loads()编写起来并不多,但这确实很方便):
resp.json()或者,如果您的响应数据只是文本,请使用:
resp.text这只是冰山一角。以下是requests站点的功能列表:
使用Cookie的
发布于 2010-01-07 11:43:09
urllib2提供了一些额外的功能,即urlopen()函数可以让您指定头部(通常您必须在过去使用httplib,这要冗长得多)。但更重要的是,urllib2提供了Request类,它允许以一种更具声明性的方法来处理请求:
r = Request(url='http://www.mysite.com')
r.add_header('User-Agent', 'awesome fetcher')
r.add_data(urllib.urlencode({'foo': 'bar'})
response = urlopen(r)请注意,urlencode()只在urllib中,而不在urllib2中。
还有一些处理程序用于在urllib2中实现更高级的URL支持。简短的答案是,除非您正在使用遗留代码,否则您可能希望使用urllib2中的URL opener,但是您仍然需要导入到urllib中以实现一些实用函数。
Bonus answer与谷歌应用程序引擎,你可以使用任何httplib,urllib或urllib2,但所有这些都只是谷歌的URL Fetch API的包装器。也就是说,您仍然受到相同的限制,例如端口、协议和允许的响应长度。不过,您可以像检索HTTP那样使用库的核心。
发布于 2020-08-04 00:34:23
这是我对各种“urllib”之间关系的理解:
在Python2标准库中,有两个HTTP库并排存在。尽管名称相似,但它们是无关的:它们具有不同的设计和不同的实现。
urllib是最初的Python HTTP客户端,添加到Python 1.2的标准库中。可以在Python 1.4.中找到urllib的早期文档
urllib2是一个功能更强大的超文本传输协议客户端,added in Python 1.6,旨在取代urllib:urllib -新的、改进的但不兼容的experimental).版本(仍然是urllib2
可以在Python 2.1中找到urllib2的早期文档。
Python3标准库有一个 urllib,它是旧模块的合并/重构/重写版本。
urllib3是一个第三方包(也就是说,不在CPython的标准库中)。尽管名称如此,但它与标准库软件包无关,将来也不打算将其包含在标准库中。
最后,requests在内部使用了urllib3,但它的目标是更易于使用。
https://stackoverflow.com/questions/2018026
复制相似问题