Requests簡介
Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。比Python 標準庫中的 urllib2 模塊功能強大。
Requests 使用的是 urllib3,因此繼承了它的所有特性。Requests 支持 HTTP 連接保持和連接池,支持使用 cookie 保持會話,支持文件上傳,支持自動確定響應內容的編碼,支持國際化的 URL 和 POST 數據自動編碼。
功能特性
Requests 完全滿足如今網絡的需求。
- 國際化域名和 URLs
- Keep-Alive & 連接池
- 持久的 Cookie 會話
- 類瀏覽器式的 SSL 加密認證
- 基本/摘要式的身份認證
- 優雅的鍵/值 Cookies
- 自動解壓
- Unicode 編碼的響應體
- 多段文件上傳
- 連接超時
- 支持
.netrc
- 適用於
Python 2.6—3.4
- 線程安全
牛刀小試
>>> import requests
>>> r = requests.get('http://www.baidu.com') # 發送請求
>>> r.status_code # 網頁狀態碼
200
>>> r.headers['content-type'] #響應頭內容
'text/html; charset=utf-8'
>>> r.encoding #獲取網頁編碼
'utf-8'
>>> r.text #獲取響應網頁的內容
'<!DOCTYPE html><!--STATUS OK--><html><head>...
爲URL傳遞參數
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get("http://httpbin.org/get", params=payload)
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
超時
你可以告訴requests在經過以 timeout 參數設定的秒數時間之後停止等待響應:
>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
代理
如果需要使用代理,你可以通過爲任意請求方法提供 proxies 參數來配置單個請求:
import requests
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)
錯誤與異常
遇到網絡問題(如:DNS查詢失敗、拒絕連接等)時,Requests會拋出一個 ConnectionError 異常。
遇到罕見的無效HTTP響應時,Requests則會拋出一個 HTTPError 異常。
若請求超時,則拋出一個 Timeout 異常。
若請求超過了設定的最大重定向次數,則會拋出一個 TooManyRedirects 異常。
所有Requests顯式拋出的異常都繼承自 requests.exceptions.RequestException 。
更多介紹可參考官方文檔