靖江網(wǎng)站建設(shè)/百度小說風(fēng)云榜今天
目錄
HTTP協(xié)議
1. 請求
2. 響應(yīng)
Requests庫
1. 安裝
2. 請求方式
2.1 requests.請求方式(參數(shù))
2.2 requests.request()
?2.3 requests.session().request()
2.4 三種方式之間的關(guān)聯(lián)
3. 請求參數(shù)
3.1 params:查詢字符串參數(shù)
3.2 data:Form表單參數(shù)
3.3 json:json參數(shù)
3.4 files:文件參數(shù)
4. 響應(yīng)內(nèi)容
HTTP協(xié)議
1. 請求
1.1 請求行:請求方式,請求路徑,協(xié)議
1.2 請求頭
- Content-Type:客戶端發(fā)送的數(shù)據(jù)格式
- application/x-www-form-urlencoded:表單格式
- application/json:json數(shù)據(jù)
- multipart/form-data:文件上傳
- application/octrent-stream:二進制文件上傳
- Accept:接收的數(shù)據(jù)格式
- X-Requested-with:異步請求
- User-Agent:客戶端類型
- Cookie:Cookie信息
1.3 請求正文; 請求數(shù)據(jù),字節(jié)流
2. 響應(yīng)
2.1 響應(yīng)行:狀態(tài)碼,狀態(tài)信息
2.2 常見狀態(tài)碼:
-
200 請求成功
-
201 創(chuàng)建成功
-
204 沒有內(nèi)容可響應(yīng)
-
301 永久重定向
-
302 臨時重定向
-
401 沒有提高身份信息
-
403 權(quán)限不足
-
404 資源不存在
-
405 請求方法不允許
-
429 請求太頻繁
-
500 本地服務(wù)器掛了
-
502 遠(yuǎn)程服務(wù)器掛了
2.3 響應(yīng)頭--示例:Content-Type: image/png
2.4 響應(yīng)數(shù)據(jù):字節(jié)流
Requests庫
1. 安裝
pip install requests
2. 請求方式
2.1 requests.請求方式(參數(shù))
這里請求方式常用的基本上就是get,post,delete,put這幾種,其中最常用的就是get和post
requests.get(url, params=None, **kwarg)
requests.post(url, data=None, json=None, **kwargs)
requests.delete(url, **kwarg)
requests.put(url, data=None, **kwargs)
2.2 requests.request()
requests.request(method, url, **kwargs)
從原碼可以看到method其實就是2.1中的那幾種請求方式
?查看2.1中請求方式原碼可以看到,2.1方法調(diào)用的底層代碼其實就是2.2的方法
?2.3 requests.session().request()
通過session的方式調(diào)用,可以夠自動的處理有cookie關(guān)聯(lián)的接口,當(dāng)有cookie需要關(guān)聯(lián)是建議使用這種請求方式
requests.session().request(self,method, # 請求方式url, # 請求路徑params=None, # params參數(shù):查詢字符串參數(shù),在接口路徑后面以?傳遞的參數(shù),多個參數(shù)之間用&分隔data=None, # 表單參數(shù):Content-Type:application/x-www-form-urlencodedheaders=None, # 請求頭cookies=None, # cookiesfiles=None, # 文件參數(shù):Content-Type:multipart/form-dataauth=None, # 鑒權(quán)timeout=None, # 超時allow_redirects=True, # 是否重定向,True-是proxies=None, # 代理設(shè)置hooks=None, # 鉤子:用來控制部分請求過程,或信號事件處理stream=None, # 文件下載:用于控制是否立即下載響應(yīng)體,默認(rèn)情況下是stream=Ffalseverify=None, # 證書cert=None, # ca證書json=None, # json參數(shù):Content-Type:application/json)
?1. 在請求行傳遞參數(shù): method、url、params
2. 在請求頭傳遞參數(shù):headers、cookies
3. 在請求正文傳遞參數(shù):data、files、json
?(1). json和其他會沖突
?(2). 單獨傳的情況:
-
data會進行編碼 : content-type: application/x-www-form-urlencoded
-
files會增加分隔符 content-type: multipart/form-data;boundary=6d0c340d943891526bd14fab465025bb
-
josn格式直接傳: content-type: application/json
-
data傳遞的不是字典時,沒有 content-type
4. 設(shè)置請求接口時的傳輸細(xì)節(jié):auth、timeout、allow_redirects、proxies、verify
2.4 三種方式之間的關(guān)聯(lián)
requests.get -> requests.request("GET") -> Session().request("get")
requests.post -> requests.request("post") -> Session().request("post")
3. 請求參數(shù)
3.1 params:查詢字符串參數(shù)
params = {"name":"ces","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,params=params)
- params參數(shù)在接口路徑后面以?傳遞的參數(shù),多個參數(shù)之間用&分隔
- 對參數(shù)內(nèi)容進行了urlencode編碼(內(nèi)容以ASCII的方式呈現(xiàn))
3.2 data:Form表單參數(shù)
data = {"name":"張三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,data=data)
- 自動添加了一個請求頭:Content-Type: application/x-www-form-urlencoded
- 對參數(shù)內(nèi)容進行了urlencode編碼
3.3 json:json參數(shù)
json = {"name":"張三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,json=json)
- 添加請求頭:Content-Type: application/json
- 對參數(shù)進行:Unicode編碼
3.4 files:文件參數(shù)
上傳已存在的文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads":open("D:/work/test.txt")}
requests.get(url=url, files=file)
- 添加請求頭:Content-Type: multipart/form-data
- 構(gòu)建了一個表單參數(shù),把文件的內(nèi)容以二進制的方式加到body里面
上傳不存在的文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads":("test1.txt","test11111","text/plain")}
requests.get(url=url, files=file)
?這里如果不知道上傳的文件的Content-Type是啥可以直接進行百度然后找到對應(yīng)的即可
上傳多個文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads1":open("D:/work/test.txt"),"uploads2":("test1.txt", "test11111", "text/plain")}
requests.get(url=url, files=file)
?注意這里name不能重復(fù)了
同時傳遞表單參數(shù)和文件參數(shù)---此時表單不會進行urlencode編碼
url = 'http://192.168.1.1:8088/list'
file = {"uploads1":open("D:/work/test.txt"),}
data = {"name":"張三","age":18}
requests.get(url=url, data=data, files=file)
因為文件上傳方式會自動添加請求頭:Content-Type: multipart/form-data,所以可以和表單一起同時傳遞
4. 響應(yīng)內(nèi)容
print(res.text) # 返回字符串類型的數(shù)據(jù)
print(res.content) # 返回二進制類型的數(shù)據(jù)
res.json() # 把json字符串轉(zhuǎn)化為字典格式返回
print(res.status_code) # 狀態(tài)碼
print(res.reason) # 狀態(tài)信息
print(res.cookies) # cookie信息
print(res.encoding) # 編碼格式
print(res.headers) # 響應(yīng)頭
print(res.elapsed) # 耗時
print(res.request.method) # 請求方式
print(res.request.url) # 請求路徑
print(res.request.headers) # 請求頭
print(res.request.body) # 請求數(shù)據(jù)
?