Python Requests模組快速入門

pythontab發表於2018-01-05

requests是python的一個HTTP客戶端庫,跟urllib,urllib2類似。它比 urllib 更加方便,可以節約我們大量的工作,它比 urllib 更加 Pythoner。

安裝 Requests

透過pip安裝

$ pip install requests

或者,下載程式碼後安裝:

$ wget https://github.com/requests/requests/tarball/master
$ mv master requests.tgz
$ tar xzf requests.tgz
$ cd requests-requests-3dc84cd
$ python setup.py install

傳送請求

使用Requests傳送網路請求非常簡單。

>>> import requests #匯入Requests模組
>>> result = requests.get('http://www.pythontab.com') # 生成Response 物件
>>> result.status_code  # 返回碼 
200
>>> result.headers['content-type']  # 返回頭部資訊
'text/html; charset=utf8'
>>> result.encoding  # 編碼資訊
'utf-8'
>>> result.content  #內容部分


為URL傳遞引數

你也許經常想為URL的查詢字串(query string)傳遞某種資料。如果你是手工構建URL,那麼資料會以鍵/值 對的形式置於URL中,跟在一個問號的後面。例如,www.pythontab.com?version=python3 。 Requests允許你使用 params 關鍵字引數,以一個字典來提供這些引數。舉例來說,如果你想傳遞 version=python3 和 keywords=pythontab 到 www.pythontab.com ,那麼你可以使用如下程式碼:

>>> data = {'version': 'python3', 'keywords': 'pythontab'}
>>> result = requests.get("http://www.pythontab.com", params=data)
>>> print result.status_code
200

原始響應內容

在罕見的情況下你可能想獲取來自伺服器的原始套接字響應,那麼你可以訪問 r.raw 。 如果你確實想這麼幹,那請你確保在初始請求中設定了 stream=True 。具體的你可以這麼做:

>>> result = requests.get('http://www.pythontab.com', stream=True)
>>> result.raw
<requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
>>> result.raw.read(10)
'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'

定製請求頭

如果你想為請求新增HTTP頭部,只要簡單地傳遞一個 dict 給 headers 引數就可以了。

例如,在前一個示例中我們沒有指定content-type:

>>> import requests
>>> url = 'http://www.pythontab.com'
>>> data = {'version': 'python3', 'keywords': 'pythontab'}
>>> headers = {'content-type': 'application/json'}
>>> result = requests.post(url, data=json.dumps(data), headers=headers)

錯誤與異常

遇到網路問題(如:DNS查詢失敗、拒絕連線等)時,Requests會丟擲一個ConnectionError 異常。

遇到罕見的無效HTTP響應時,Requests則會丟擲一個 HTTPError 異常。

若請求超時,則丟擲一個 Timeout 異常。

若請求超過了設定的最大重定向次數,則會丟擲一個 TooManyRedirects 異常。

所有Requests顯式丟擲的異常都繼承自 requests.exceptions.RequestException 。


其他常用方法

result.content #獲取二進位制響應內容

result.json()  #JSON響應內容

result.headers #響應頭內容

result.cookies #cookie內容

result.history #請求歷史


相關文章