requests 官方文檔:html
http://cn.python-requests.org/zh_CN/latest/user/quickstart.htmlpython
request 是一個第三方的HTTP庫json
1.發起請求瀏覽器
發起GET請求很是簡單,直接使用requests的get方法便可。比方說下面的代碼獲取百度首頁的信息。服務器
1 import requests 2 3 baidu_url = 'https://www.baidu.com' 4 5 response = requests.get(baidu_url) 6 print(response.content.decode())
1 #基本Get請求 2 r = requests.get('http://httpbin.org/get') 3 #若是要加參數,能夠利用params參數 4 payload = {'key1':'values','key2':'valus'} 5 r = requests.get('http://httpbin.org/get',params=payload) 6 print r.url
其餘經常使用的HTTP操做例如PUT、DELETE、HEAD、OPTIONS等也支持,調用相應方法便可。cookie
發起請求以後,返回值是一個Response對象,利用它咱們能夠方便的獲取結果。數據結構
響應對象的經常使用屬性和方法以下。app
屬性名 | 結果 |
---|---|
text | HTTP字符 |
encoding | 響應編碼,這個值能夠改變,改變以後text屬性也會根據編碼而變化 |
content | 未編碼的二進制數據 |
json() | 返回JSON數據 |
raw | 結果的原始字節流 |
url | 請求的URL |
status_code | 狀態碼 |
headers | 請求頭字典 |
cookies | cookies字典 |
history | 若是發生重定向,全部請求對象都會保存到這裏 |
若是要在請求上添加請求頭,也很是簡單。有些網站對客戶端的限制比較嚴格,因此咱們必須假裝header。post
1 #若是想添加headers 能夠傳入headers參數 2 headers = {'content-type':'application/jason'} 3 r = requests.get('http://httpbin.org/get',headers = headers) 4 print r.url
假如使用自帶的urllib標準庫,那麼代碼就比較複雜了。從這裏咱們能夠看到requests確實很是方便。網站
headers = {'content-type':'application/jason'} r = urllib2.request(url,headers = headers) response = urllib2.urlopen(r) print response.read().decode()
若是咱們要發送複雜的表單,就須要POST數據了。和GET傳送數據同樣,想方法中額外添加一個data參數的事兒。這種方式至關於你在表單中填寫這些數據,而後點擊表單的提交。
data = { 'name': 'yitian', 'age': 22, 'friends': ['zhang3', 'li4'] } response = requests.post(f'{base_url}post', data=data) print(response.text)
有時候POST數據不是使用表單方式,而是直接在請求體中附加參數。那麼咱們在發送參數的時候不能向data參數添加字典了,而應該傳遞字符串。
import json data = { 'name': 'yitian', 'age': 22, 'friends': ['zhang3', 'li4'] } response = requests.post(f'{base_url}post', data=json.dumps(data)) print(response.text)
備註: json的幾個經常使用方法 json.load(), json.dump() ,json.loads(), json.dumps()
json.loads() : 將json結構轉變成Python數據結構
json.dumps():將Python數據結構轉變成json結構
json.load(): 讀取json文件轉成Python數據結構
json.dumps():寫入jason文件
參考自: https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html
有些程序(例如Github的API)須要將JSON字符串直接當作請求體發送,好比說上面這種將字典轉換爲JSON的例子。在這種狀況下,咱們能夠直接將字典的引用傳遞給方法的json參數,這樣就不須要咱們手動轉換,requests會自動轉換。
response = requests.post(f'{base_url}post', json=data)
上傳文件
在網頁上,上傳頭像等操做都須要上傳multipart/form-data類型的表單。使用requests也很是簡單。須要注意打開文件的時候最好使用二進制模式,使用文本模式打開文件可能致使requests不能正確計算文件的大小。
file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb') data = { 'file': file } response = requests.post(f'{base_url}post', files=data) print(response.text)
#requests 支持流失上傳的,容許發送大的數據流或文件而無需先把他讀入內存。需使用流式上傳
with open('massive-body') as f: requests.post('http://some.url/streamed',data=f)
若是要獲取響應的cookies,調用cookies屬性便可,它會返回一個RequestsCookieJar
對象,它實現了標準庫的http.cookiejar。因此咱們能夠按照cookiejar的方法來使用RequestsCookieJar
。好比說訪問百度的時候,它會分配一個cookie,因此咱們可使用下面的代碼獲取Cookie。
response = requests.get(baidu_url) print(response.cookies)
若是要在發送數據的時候向服務器傳遞cookie,須要實例化一個RequestsCookieJar,而後傳遞給發送方法的cookies參數。
import requests.cookies cookies = requests.cookies.RequestsCookieJar() cookies.set('name', 'yitian') response = requests.get(f'{base_url}cookies', cookies=cookies) print(response.text)
以上就是requests的快速入門。具體的高級應用能夠參考官方文檔。