1、介紹python
Requests 是用Python語言編寫,基於 urllib,可是它比 urllib 更加方便,能夠節約咱們大量的工做,徹底知足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語爲中心開發的,因此它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 !git
2、用法 github
一、使用 Requests 發送網絡請求json
import requests r = requests.get('https://github.com/timeline.json') r = requests.post("http://httpbin.org/post") r = requests.put("http://httpbin.org/put") r = requests.delete("http://httpbin.org/delete") r = requests.head("http://httpbin.org/get") r = requests.options("http://httpbin.org/get")
二、傳遞 URL 參數api
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params=payload)
經過打印輸出該 URL,你能看到 URL 已被正確編碼:服務器
print(r.url) http://httpbin.org/get?key2=value2&key1=value1
三、響應內容cookie
r.text能夠看到地址響應的內容網絡
Requests 會自動解碼來自服務器的內容。大多數 unicode 字符集都能被無縫地解碼。app
四、二進制響應內容ide
你也能以字節的方式訪問請求響應體
r.content
Requests 會自動爲你解碼 gzip 和 deflate 傳輸編碼的響應數據。
例:以請求返回的二進制數據建立一張圖片:
from PIL import Image from io import BytesIO i = Image.open(BytesIO(r.content))
五、JSON 響應內容
Requests 中也有一個內置的 JSON ×××
import requests r = requests.get('https://github.com/timeline.json')
r.json() 若是 JSON 解碼失敗, r.json() 就會拋出一個異常。例如,響應內容是 401 (Unauthorized),嘗試訪問r.json() 將會拋出 ValueError: No JSON object could be decoded 異常。
六、定製請求頭
url = 'https://api.github.com/some/endpoint' headers = {'user-agent': 'my-app/0.0.1'} r = requests.get(url, headers=headers)
全部的 header 值必須是 string、bytestring 或者 unicode。
七、更加複雜的 POST 請求
payload = (('key1', 'value1'), ('key1', 'value2')) r = requests.post('http://httpbin.org/post', data=payload) print(r.text) (json直接傳遞) import json url = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} r = requests.post(url, data=json.dumps(payload))
八、響應狀態碼
r.status_code(狀態碼)
r.raise_for_status() (拋出異常)
九、響應頭
r.headers
十、Cookie
url = 'http://example.com/some/cookie/setting/url' r = requests.get(url) r.cookies['example_cookie_name'] 'example_cookie_value' 發送你的cookies到服務器:(Cookie 的返回對象爲 RequestsCookieJar) r = 'http://httpbin.org/cookies' cookies = dict(cookies_are='working') r = requests.get(url, cookies=cookies) r.text '{"cookies": {"cookies_are": "working"}}'
十一、重定向與請求歷史
默認狀況下,除了 HEAD, Requests 會自動處理全部重定向。可使用響應對象的 history 方法來追蹤重定向。
Response.history 是一個 Response 對象的列表,爲了完成請求而建立了這些對象。這個對象列表按照從最老到最近的請求進行排序。
例:Github 將全部的 HTTP 請求重定向到 HTTPS:
r = requests.get('http://github.com') r.url 'https://github.com/' r.status_code 200 r.history [<Response [301]>]
能夠經過 allow_redirects 參數禁用重定向處理:
r = requests.get('http://github.com', allow_redirects=False) r.status_code 301 r.history []
十二、超時
你能夠告訴 requests在通過以timeout參數設定的秒數時間以後中止等待響應。若是不使用,你的程序可能會永遠失去響應:
requests.get('http://github.com', timeout=0.001)
注意:
timeout僅對鏈接過程有效,與響應體的下載無關。timeout並非整個下載響應的時間限制,而是若是服務器在timeout秒內沒有應答,將會引起一個異常。
1三、錯誤與異常
遇到網絡問題(如:DNS 查詢失敗、拒絕鏈接等)時,Requests 會拋出一個 ConnectionError 異常。
若是 HTTP 請求返回了不成功的狀態碼, Response.raise_for_status() 會拋出一個 HTTPError 異常。
若請求超時,則拋出一個 Timeout 異常。
若請求超過了設定的最大重定向次數,則會拋出一個 TooManyRedirects 異常。