基礎(chǔ)篇Python發(fā)送Post請(qǐng)求之根據(jù)參數(shù)位置傳參、數(shù)據(jù)類型、不同方式傳參
目錄
- 一、驗(yàn)證 SSL 證書
- 二、post 請(qǐng)求
- 1.斷言
- 2.參數(shù)放在 body 里面的 post 請(qǐng)求
- 3.參數(shù)不放在 body 里面的 post 請(qǐng)求
- 4.到底哪些參數(shù)放在 Query String,哪些參數(shù)放在 body 里面呢?
- 5.如果兩個(gè)地方同時(shí)都有,那么就可以同時(shí)傳兩個(gè),一一對(duì)應(yīng)就可以
- 三、Content-Type 的格式不同,就用不同的方式傳參
- 1.寫 post 請(qǐng)求要注意它的數(shù)據(jù)類型到底是哪種
- 2.不同的方式傳參
- 3.json 格式的 post 請(qǐng)求
一、驗(yàn)證 SSL 證書
https 的請(qǐng)求相對(duì)于 http 安全級(jí)別高,需要驗(yàn)證 SSL 證書。
圖片來(lái)自網(wǎng)絡(luò)
https 的請(qǐng)求,打開 fiddler 的時(shí)候,同時(shí)運(yùn)行代碼會(huì)報(bào)錯(cuò),提示沒有這個(gè)證書。可以忽略這個(gè)證書,加上verify=False就可以了。但是還是有警告,可以這樣寫:
- import urllib3
- urllib3.disable_warnings()
來(lái)忽略警告。
靠譜鏈接:https://blog.csdn.net/qq_35304570/article/details/79826990
二、post 請(qǐng)求
1.斷言
斷言就是通常說(shuō)的檢查點(diǎn)。
斷言和 if 的區(qū)別: 斷言是當(dāng)它不等于的時(shí)候,就拋出異常。等于的時(shí)候不拋出異常。if 語(yǔ)句就是打印出來(lái),讓你看下。
- import requests
- import urllib3
- urllib3.disable_warnings()
- url='http://japi.juhe.cn/qqevaluate/qq'
- b={"key":"1cb0de9717e554cef5f3539285b99726",
- "qq":"169535"}
- r=requests.post(url,data=b)
- print(r.text)
- #轉(zhuǎn)換成字典后,再去取值
- reason=r.json()["reason"]
- print(reason) #實(shí)際結(jié)果
- exp="success"#預(yù)期結(jié)果
- #斷言
- # assert reason==exp
- if reason==exp:
- print("測(cè)試通過(guò)")
- else:
- print("測(cè)試失敗")
if 語(yǔ)句也可以拋出異常,例如換成raise NameError。
- import requests
- import urllib3
- urllib3.disable_warnings()
- url='http://japi.juhe.cn/qqevaluate/qq'
- b={"key":"1cb0de9717e554cef5f3539285b9972",
- "qq":"169535"}
- r=requests.post(url,data=b)
- print(r.text)
- #轉(zhuǎn)換成字典后,再去取值
- reason=r.json()["reason"]
- print(reason) #實(shí)際結(jié)果
- exp="success"#預(yù)期結(jié)果
- #斷言
- # assert reason==exp
- if reason==exp:
- print("測(cè)試通過(guò)")
- else:
- raise NameError
異常是想拋出就可以拋出,不想拋出就可以不拋出。
2.參數(shù)放在 body 里面的 post 請(qǐng)求
body 中的參數(shù)為鍵值對(duì)格式的。
圖片來(lái)自網(wǎng)絡(luò)
3.參數(shù)不放在 body 里面的 post 請(qǐng)求
post 請(qǐng)求的參數(shù)也可以放在 params 里面:
這個(gè)不是隨便放的,如果接口文檔沒有規(guī)定參數(shù)放到請(qǐng)求體的話,你就可以放到 params 里面,也可以放到 body 里面。
圖片來(lái)自網(wǎng)絡(luò)
4.到底哪些參數(shù)放在 Query String,哪些參數(shù)放在 body 里面呢?
抓包,如果看到接口的參數(shù)在url的?號(hào)后面,就用params去傳,如果在頭部的空一行下面,就用data去傳。
5.如果兩個(gè)地方同時(shí)都有,那么就可以同時(shí)傳兩個(gè),一一對(duì)應(yīng)就可以
圖片來(lái)自網(wǎng)絡(luò),圖片上的文字是小編編輯的
- import requests
- import urllib3
- urllib3.disable_warnings()
- url='http://japi.juhe.cn/qqevaluate/qq'
- p={"key":"1cb0de9717e554cef5f3539285b99726",
- "qq":"169535"}
- body={
- "xx":"xxx"
- }
- #Content-Type:application/x-www-form-urlencoded
- r=requests.post(url,params=p,data=body)
- print(r.text)
- #轉(zhuǎn)換成字典后,再去取值
- reason=r.json()["reason"]
- print(reason) #實(shí)際結(jié)果
- exp="success"#預(yù)期結(jié)果
- #斷言
- # assert reason==exp
- if reason==exp:
- print("測(cè)試通過(guò)")
- else:
- print("測(cè)試不通過(guò)")
總結(jié): post 請(qǐng)求參數(shù)有的在 url 里,有的在 body 里面,有的 url 和 body 里面都有。
什么時(shí)候發(fā) get 請(qǐng)求,什么時(shí)候發(fā) post 請(qǐng)求,這個(gè)是由開發(fā)文檔來(lái)決定的。
三、Content-Type 的格式不同,就用不同的方式傳參
1.寫 post 請(qǐng)求要注意它的數(shù)據(jù)類型到底是哪種
常見的有四種,并不是只有四種。
1.第一種是 application/json:{“key1“:”value1”,“keyt2":“value2"}
json=
2.第二種是 application/x-www-form-urlencoded:name1= value1&name2=value2
data=
3.第三種是 multipart/form-data:這一種是表單格式的(文件上傳 file=,圖片上傳等混合式)
data=
4.Content-Type:octets/stream(文件下載)
data=
5.text/xml
data=
2.不同的方式傳參
圖片來(lái)自網(wǎng)絡(luò)
get 請(qǐng)求也是這種格式,主要是 post 請(qǐng)求需要去區(qū)分。
post 請(qǐng)求: 如果是application/x-www-form-urlencoded這種格式的參數(shù),就用data=,如果是application/json這種格式的參數(shù),就用json=。
劃重點(diǎn): 只有 Content-Type 它是application/json這種格式的參數(shù),就用json=,其它的格式的參數(shù)都用data=。url 上面的參數(shù)還是用params=。
3.json 格式的 post 請(qǐng)求
頭部聲明下請(qǐng)求 body 的參數(shù)類型。
用 fiddler 發(fā)個(gè)請(qǐng)求:
代碼可以這樣寫:
第一個(gè)參數(shù)傳 url,這個(gè)位置不能隨便變,后面的參數(shù)的位置是可以任意變的,只要指定了參數(shù)名稱就可以了。
- import requests
- url="http://www.example.com/"
- h={"Content-Type":"application/json"}
- body={"key":"1cb0de9717e554cef5f3539285b99726",
- "qq":"169535"}
- #Content-Type:application/json 傳json=
- r=requests.post(url,headers=h,json=body)
- print(r.text)
使用 fiddler 的時(shí)候: ctrl+x 可以清空 fiddler 抓到的包。暫停點(diǎn)擊 Capturing。
本文轉(zhuǎn)載自微信公眾號(hào)「清菡軟件測(cè)試」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系清菡軟件測(cè)試公眾號(hào)。