python 2 處理HTTP 請求的包

httplib

httplib: https://docs.python.org/2/library/httplib.htmlhtml

python 的官方文檔這樣說明:python

This module defines classes which implement the client side of the HTTP and HTTPS protocols. It is normally not used directly — the module urllib uses it to handle URLs that use HTTP and HTTPS.

總結起來就是:該庫通常不直接使用,比較底層。git

GET的官方例子:github

>>> import httplib
>>> conn = httplib.HTTPSConnection("www.python.org")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
200 OK
>>> data1 = r1.read()
>>> conn.request("GET", "/")
>>> r2 = conn.getresponse()
>>> print r2.status, r2.reason
404 Not Found
>>> data2 = r2.read()
>>> conn.close()

urllib

urllib:https://docs.python.org/2/library/urllib.htmljson

基於httplib,可是比httplib更高層一些。api

發送請求使用urllib.urlopen,帶有params參數則是POST,不然就是GET。安全

GET:app

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)
>>> print f.read()

POST:ide

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()

urllib2

urllib2:https://docs.python.org/2/library/urllib2.html函數

urllib2 也是使用 urlopen來發送請求。

urllib vs urllib2:

參考 Python: difference between urllib and urllib2

1) urllib不能夠設置頭信息等。urllib2的urlopen函數,URL參數能夠是字符串或者Request對象,而Request對象能夠設置頭信息等;而urllib中URL只能夠接受字符串。

2) urllib提供urlencode方法,urllib2沒有。urlencode方法用來生成GET查詢字符串。

正是因爲urllib2沒有urlencode方法,致使urllib使用的更普遍。

urllib3

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

urllib3 brings many critical features that are missing from the Python standard libraries:

-Thread safety.
-Connection pooling.
-Client-side SSL/TLS verification.
-File uploads with multipart encoding.
-Helpers for retrying requests and dealing with HTTP redirects.
-Support for gzip and 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'

Requests

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

Requests 基於urllib3,號稱「Requests is an elegant and simple HTTP library for Python, built for human 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, ...}

總結

Python 2.X處理HTTP的包:httpliburlliburllib2urllib3requests

其中,httplib比較 low-level,通常不直接使用。

urllib、urllib二、urllib3比較相似:urllib用的比較多,urllib3擁有比較多的特性可是不是標準庫。

requests 基於urllib3 ,也不是標準庫,可是使用很是方便。

我的感受,若是非要用標準庫,就使用urllib。若是沒有限制,就用requests。

相關文章
相關標籤/搜索