httplib
httplib: https://docs.python.org/2/library/httplib.html
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.
總結起來就是:該庫一般不直接使用,比較底層。
GET的官方例子:
>>> 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.html
基於httplib,但是比httplib更高層一些。
發送請求使用urllib.urlopen,帶有params參數則是POST,否則就是GET。
GET:
>>> 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:
>>> 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的包:httplib,urllib,urllib2,urllib3,requests。
其中,httplib比較 low-level,一般不直接使用。
urllib、urllib2、urllib3比較類似:urllib用的比較多,urllib3擁有比較多的特性但是不是標准庫。
requests 基於urllib3 ,也不是標准庫,但是使用非常方便。
個人感覺,如果非要用標准庫,就使用urllib。如果沒有限制,就用requests。