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: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:https://docs.python.org/2/library/urllib2.html函數
urllib2 也是使用 urlopen來發送請求。
參考 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: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: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、urllib二、urllib3比較相似:urllib用的比較多,urllib3擁有比較多的特性可是不是標準庫。
requests 基於urllib3 ,也不是標準庫,可是使用很是方便。
我的感受,若是非要用標準庫,就使用urllib。若是沒有限制,就用requests。