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 #請求歷史