溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

發(fā)布時(shí)間:2021-10-19 09:41:00 來(lái)源:億速云 閱讀:188 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、驗(yàn)證 SSL 證書(shū)

https 的請(qǐng)求相對(duì)于 http 安全級(jí)別高,需要驗(yàn)證 SSL 證書(shū)。

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

圖片來(lái)自網(wǎng)絡(luò)

https 的請(qǐng)求,打開(kāi) fiddler  的時(shí)候,同時(shí)運(yùn)行代碼會(huì)報(bào)錯(cuò),提示沒(méi)有這個(gè)證書(shū)??梢院雎赃@個(gè)證書(shū),加上verify=False就可以了。但是還是有警告,可以這樣寫(xiě):

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ǔ)句也可以?huà)伋霎惓#鐡Q成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

異常是想拋出就可以?huà)伋?,不想拋出就可以不拋出?/p>

2.參數(shù)放在 body 里面的 post 請(qǐng)求

body 中的參數(shù)為鍵值對(duì)格式的。

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

圖片來(lái)自網(wǎng)絡(luò)

3.參數(shù)不放在 body 里面的 post 請(qǐng)求

post 請(qǐng)求的參數(shù)也可以放在 params 里面:

這個(gè)不是隨便放的,如果接口文檔沒(méi)有規(guī)定參數(shù)放到請(qǐng)求體的話(huà),你就可以放到 params 里面,也可以放到 body 里面。

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參


Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

圖片來(lái)自網(wǎng)絡(luò)

4.到底哪些參數(shù)放在 Query String,哪些參數(shù)放在 body 里面呢?

抓包,如果看到接口的參數(shù)在url的?號(hào)后面,就用params去傳,如果在頭部的空一行下面,就用data去傳。

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

5.如果兩個(gè)地方同時(shí)都有,那么就可以同時(shí)傳兩個(gè),一一對(duì)應(yīng)就可以

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

圖片來(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è)是由開(kāi)發(fā)文檔來(lái)決定的。

三、Content-Type 的格式不同,就用不同的方式傳參

1.寫(xiě) post 請(qǐng)求要注意它的數(shù)據(jù)類(lèi)型到底是哪種

常見(jiàn)的有四種,并不是只有四種。

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.不同的方式傳參

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

圖片來(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ù)類(lèi)型。

用 fiddler 發(fā)個(gè)請(qǐng)求:

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參

代碼可以這樣寫(xiě):

第一個(gè)參數(shù)傳 url,這個(gè)位置不能隨便變,后面的參數(shù)的位置是可以任意變的,只要指定了參數(shù)名稱(chēng)就可以了。

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。

“Python發(fā)送Post請(qǐng)求之如何實(shí)現(xiàn)根據(jù)參數(shù)位置傳參、數(shù)據(jù)類(lèi)型、不同方式傳參”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI