python3处理http请求的包

来源:互联网 发布:高级算法工程师年薪 编辑:程序博客网 时间:2024/06/15 16:48

1.1. http

http: https://docs.python.org/3/library/http.html

http是一个包,里面含有多个模块:http.client,http.server,http.cookies,http.cookiejar。

http.client 对应python2.X的 httplib 模块。

官方文档对 http.client的说明如下:

This module defines classes whichimplement the client side of the HTTP and HTTPS protocols. It is normally notused directly — the moduleurllib.request uses it to handle URLs that use HTTP and HTTPS.

总结起来就是:该库一般不直接使用,比较底层。

GET的官方例子:

>>> import http.client

>>> conn =http.client.HTTPSConnection("www.python.org")

>>> conn.request("GET","/")

>>> r1 = conn.getresponse()

>>> print(r1.status, r1.reason)

200 OK

>>> data1 = r1.read()  # This will return entire content.

 

2.2. urllib

urllib:https://docs.python.org/3/library/urllib.html

urllib也是一个包,里面含有多个模块:urllib.request,urllib.error,urllib.parse,urllib.robotparser。

这里的urllib.request跟python 2.X 的urllib2有点像。

urllib.request 基于http.client,但是比 http.client 更高层一些。

发送请求使用urllib.request.urlopen,URL可以接受字符串或者Request对象。带有data参数就是POST方法,否则就是GET。

GET:

>>> import urllib.request

>>> import urllib.parse

>>> params =urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})

>>> url ="http://www.musi-cal.com/cgi-bin/query?%s" % params

>>> withurllib.request.urlopen(url) as f:

...    print(f.read().decode('utf-8'))

POST:

>>> import urllib.request

>>> import urllib.parse

>>> data =urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})

>>> data = data.encode('ascii')

>>> withurllib.request.urlopen("http://requestb.in/xrbl82xr", data) as f:

...    print(f.read().decode('utf-8'))

3.3. urllib3

urllib3:https://pypi.python.org/pypi/urllib3

urllib3 brings many critical features thatare missingfrom the Python standard libraries:

 

-Thread safety.

-Connection pooling.

-Client-side SSL/TLS verification.

-File uploads with multipart encoding.

-Helpers for retrying requestsand dealing with HTTP redirects.

-Support for gzipand deflate encoding.

-Proxy support for HTTP and SOCKS.

-100% test coverage.

总结起来就是:相比python的标准库,urllib3有很多很重要的特性,比如线程安全等。

同时urllib3也很强大而且易于使用。

GET示例:

>>> import urllib3

>>> http = urllib3.PoolManager()

>>> r = http.request('GET','http://httpbin.org/robots.txt')

>>> r.status

200

>>> r.data

'User-agent: *\nDisallow: /deny\n'

4.4. Requests

Requests:http://docs.python-requests.org/en/latest/index.html

Requests 基于urllib3,号称“Requests is an elegant and simple HTTP library for Python, built forhuman beings.”,意思就是专门为人类设计的HTTP库。

使用的感觉就是优雅、简单大方 。推荐使用这个库,非常好用。

官方示例:

>>> r = requests.get('https://api.github.com/user', auth=('user','pass'))

>>> r.status_code

200

>>> r.headers['content-type']

'application/json; charset=utf8'

>>> r.encoding

'utf-8'

>>> r.text

u'{"type":"User"...'

>>> r.json()

{u'private_gists': 419, u'total_private_repos': 77, ...}

5.5. 总结

Python 3 处理HTTP请求的包:httpurlliburllib3requests

其中,http比较 low-level,一般不直接使用。

urllib更high-level一点,属于标准库。urllib3跟urllib类似,拥有一些重要特性而且易于使用,但是属于扩展库,需要安装。

requests 基于urllib3,也不是标准库,但是使用非常方便。

个人感觉,如果非要用标准库,就使用urllib。如果没有限制,就用requests。

原创粉丝点击