conda install request
pip install request
pip install gunicorn httpbin
gunicorn httpbin:app
(Windows平臺不支持)url = 'http://httpbin.org/'
r = requests.get(url, 'get')
r = requests.post(url, 'post')
r = requests.put(url, 'put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
複製代碼
如request.get
,就是以GET
方式發送一個REQUEST
,獲得一個Response
類的結果r
,而後能夠從r
中獲取所需的和HTTP相關的信息。
request.get('http://httpbin.org/', 'get')
== request.get('http://httpbin.org/get')
python
movie.douban.com/subject/304…
相似的連接格式爲:
<協議>://<域名>/<接口>?<鍵1>=<值1>&<鍵2>=<值2>
Resquest庫容許使用params
關鍵字參數,以一個字符串字典來提供這些參數。git
param = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key2=value2&key1=value1
複製代碼
經過打印輸出該URL,能夠看到URL已被正確編碼,有兩點須要注意的地方:
github
None
的鍵不會被添加到URL的查詢字符串中param = {'key1': 'value1', 'key2': None }
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key1=value1
param = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get("http://httpbin.org/get", params=param)
print(r.url)
>>http://httpbin.org/get?key2=value2&key2=value3&key1=value1
複製代碼
Requests會主動解碼來自服務器的內容,大多數unicode字符集都能被無縫解碼
json
import requests
r = requests.get('https://api.github.com/events')
r.text
#<class 'str'>使用其推測的文本編碼
r.encoding
#查看Requests使用的編碼方式
r.encoding = 'utf-8'
#修改Requests使用的編碼方式
r.content
#<class 'byte'>獲取編碼
#Requests會自動解碼gzip和deflatte傳輸編碼的響應數據
複製代碼
在須要的狀況下Requests也可使用定製的編碼,若是建立了本身的編碼並使用codecs模塊進行註冊,就能夠輕鬆地使用這個解碼器名稱做爲r.encoding
的值,而後由Requests來處理編碼。api
import requests
r = requests.get('https://api.github.com/events')
r.json()
>>[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/... 複製代碼
若是JSON解碼失敗,r.json()
會拋出一個異常,例如,響應內容是401(Unauthorized),嘗試訪問r.json()
將會拋出 ValueError: No JSON object could be decoded
異常。成功調用r.json()
並不意味着響應成功,失敗的響應中可能也包含JSON對象(好比 HTTP 500錯誤細節)。要檢查請求是否成功,須要使用r.raise_for_status()
或者檢查r.status_code
是否和指望值相同。 r.status_code == requests.codes.ok
bash
若是想要爲請求添加HTTP頭部,只要簡單地傳遞一個dict
給header
就能夠實現。服務器
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
#Attention:定製header的優先級低於某些特定的信息源
複製代碼
.netrc
中設置了用戶認證信息,使用 headers=設置的受權就不會生效。而若是設置了auth=參數,.netrc
的設置就無效默認狀況下,除了HEAD, Request會自動處理全部重定向,可使用響應對象的history
方法來追蹤重定向。
Response.history
是一個Response
對象的列表,爲了完成請求而建立的對象,這個對象列表按照從最老到最近的請求進行排序。app
r = requests.get('http://github.com')
print(r.url)
print(r.status_code)
print(r.history)
>>https://github.com/
>>200
>>[<Response [301]>]
複製代碼
若是使用GET/ OPTIONS/ POST/ PUT/ PATCH/ HEAD/ DELETE,能夠經過allow_redirects
參數禁用重定向處理。工具
timeout
參數設定的秒數時間以後中止等待響應,基本上全部的生產代碼都應該使用這一參數,若是不使用,程序可能永遠失去響應
requests.get('http://github.com', timeout=0.001)
post