首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urllib3、urllib2、urllib和requests模块有什么区别?

urllib3、urllib2、urllib和requests模块有什么区别?
EN

Stack Overflow用户
提问于 2010-01-07 11:26:36
回答 11查看 391.2K关注 0票数 895

在Python中,urlliburllib2urllib3requests模块有什么不同?为什么有三个?他们似乎在做同样的事情...

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-02-11 08:32:09

我知道已经说过了,但我强烈推荐requests Python包。

如果你使用过python以外的语言,你可能会认为urlliburllib2很容易使用,代码不多,而且功能强大,这就是我过去的想法。但是requests包是如此的有用和简短,每个人都应该使用它。

首先,它支持完全restful API,并且非常简单:

代码语言:javascript
复制
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,你都不必再编码参数了,它只需接受一个字典作为参数,就可以使用了:

代码语言:javascript
复制
userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://www.mywebsite.com/user', data=userdata)

此外,它甚至还有一个内置的JSON解码器(同样,我知道json.loads()编写起来并不多,但这确实很方便):

代码语言:javascript
复制
resp.json()

或者,如果您的响应数据只是文本,请使用:

代码语言:javascript
复制
resp.text

这只是冰山一角。以下是requests站点的功能列表:

使用Cookie的

  • International域和URLs
  • Keep-Alive & Connection Pooling
  • Sessions Persistence
  • Browser-style SSL Verification
  • Basic/Digest Authentication
  • Elegant密钥/值Cookies
  • Automatic Decompression
  • Unicode响应Bodies
  • Multipart文件Uploads
  • Connection Timeouts
  • .netrc支持
  • 列表项
  • Python2.7,3.6—3.9
  • Thread-safe.
票数 805
EN

Stack Overflow用户

发布于 2010-01-07 11:43:09

urllib2提供了一些额外的功能,即urlopen()函数可以让您指定头部(通常您必须在过去使用httplib,这要冗长得多)。但更重要的是,urllib2提供了Request类,它允许以一种更具声明性的方法来处理请求:

代码语言:javascript
复制
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那样使用库的核心。

票数 224
EN

Stack Overflow用户

发布于 2020-08-04 00:34:23

这是我对各种“urllib”之间关系的理解:

在Python2标准库中,有两个HTTP库并排存在。尽管名称相似,但它们是无关的:它们具有不同的设计和不同的实现。

中找到urllib的早期文档

urllib -新的、改进的但不兼容的experimental).版本(仍然是urllib2

可以在Python 2.1中找到urllib2的早期文档。

Python3标准库有一个 urllib,它是旧模块的合并/重构/重写版本。

urllib3是一个第三方包(也就是说,不在CPython的标准库中)。尽管名称如此,但它与标准库软件包无关,将来也不打算将其包含在标准库中。

最后,requests在内部使用了urllib3,但它的目标是更易于使用。

票数 121
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2018026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档