python 2 處理HTTP 請求的包


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的包:httpliburlliburllib2urllib3requests

其中,httplib比較 low-level,一般不直接使用。

urllib、urllib2、urllib3比較類似:urllib用的比較多,urllib3擁有比較多的特性但是不是標准庫。

requests 基於urllib3 ,也不是標准庫,但是使用非常方便。

個人感覺,如果非要用標准庫,就使用urllib。如果沒有限制,就用requests。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM