Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求
在上一篇Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化之淺析requests模塊get請(qǐng)求,介紹了requests模塊、get請(qǐng)求及響應(yīng)結(jié)果詳解。接下來(lái)介紹requests模塊中的post請(qǐng)求的使用。
一、源碼解析
def post(url, data=None, json=None, **kwargs):
r"""Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
"""
return request('post', url, data=data, json=json, **kwargs)
post請(qǐng)求參數(shù)解析:
url: 請(qǐng)求的url,必填;
data: 選填,請(qǐng)求參數(shù);
json: 選填,請(qǐng)求參數(shù);
kwargs:選填,可以傳入headers、cookies等。
二、data、json區(qū)別
小伙伴們看完可能有點(diǎn)懵逼,data和json有啥區(qū)別呀,什么時(shí)候傳入data,什么時(shí)候傳入json。
舉個(gè)栗子:
data = {
"name":"vivi"
}
print(type(data))
聰明的小伙伴立即搶答了,打印的是字典類型。
那如果想把字典轉(zhuǎn)換為json字符串呢,需要引用json模塊。
import json
data = {
"name":"vivi"
}
data = json.dumps(data)
print(type(data))
敲黑板:
- 不管json是str還是dict,如果不指定headers中的content-type,默認(rèn)為application/json;
- data為dict時(shí),如果不指定content-type,默認(rèn)為application/x-www-form-urlencoded,相當(dāng)于普通form表單提交的形式;
- data為str時(shí),如果不指定content-type,默認(rèn)為application/json。
重點(diǎn)來(lái)了,post請(qǐng)求參數(shù)到底是傳data還是json,這時(shí)候我們要看請(qǐng)求頭里的content-type類型(具體參照接口文檔,沒(méi)有接口文檔的抓包)。
如果請(qǐng)求頭中content-type為application/json, 為json形式,post請(qǐng)求使用json參數(shù)。
如果請(qǐng)求頭中content-type為application/x-www-form-urlencoded,為表單形式,post請(qǐng)求時(shí)使用使用data參數(shù)。

三、form形式發(fā)送post請(qǐng)求
當(dāng)前接口的請(qǐng)求類型為application/x-www-form-urlencoded。
# 導(dǎo)入requests模塊
import requests
# 請(qǐng)求url
url = "http://127.0.0.1:8000/user/login"
# 請(qǐng)求參數(shù)
payload = {
"mobilephone":"1530272****",
"pwd":"123456"
}
# form表單形式,參數(shù)用data
res = requests.post(url, data=payload)
print(res.text)
響應(yīng)結(jié)果為:
{
"status": 1,
"code": "10001",
"data": null,
"msg": "登錄成功"
}
四、json形式發(fā)送post請(qǐng)求
當(dāng)前接口的請(qǐng)求類型為application/json。
# 導(dǎo)入requests模塊
import requests
# 請(qǐng)求的url地址
url = 'http://127.0.0.1:8000/user/login/'
# 請(qǐng)求頭
headers = {"content-type":"application/json"}
# payload 為傳入的參數(shù)
payload = {"username":"vivi","password":"123456","remember_me":"false"}
# json形式,參數(shù)用json
res = requests.post(url,json=payload,headers=headers)
print(res.text)
響應(yīng)結(jié)果為:
無(wú)響應(yīng)???
問(wèn)題來(lái)了,如果請(qǐng)求類型為application/json,我偏要傳入data參數(shù)呢?
先按我們正常思維走一波:
import requests
payload = {"username":"vivi","password":"123456","remember_me":"false"}
header = {"content-type":"application/json"}
url = 'http://127.0.0.1:8000/user/login/'
res = requests.post(url,data=payload,headers=header)
print(res.text)
響應(yīng)結(jié)果:請(qǐng)求錯(cuò)誤
{"code":400,"data":[],"message":"Input error"}
請(qǐng)求類型為application/json,如果想用data傳參,需要將字典類型數(shù)據(jù)轉(zhuǎn)換為json字符串
import requests
import json
payload = {"username":"vivi","password":"123456","remember_me":"false"}
header = {"content-type":"application/json"}
# 字典轉(zhuǎn)換為json串
data = json.dumps(payload)
url = 'http://127.0.0.1:8000/user/login/'
res = requests.post(url,data=data,headers=header)
print(res.text)
本文主要講解post源碼,data、json參數(shù)應(yīng)用場(chǎng)景及實(shí)戰(zhàn)。接口使用的本地服務(wù),如果大家想練手,可以使用公司項(xiàng)目或網(wǎng)上項(xiàng)目自行實(shí)戰(zhàn)。
本文主要講解post源碼,data、json參數(shù)應(yīng)用場(chǎng)景及實(shí)戰(zhàn)。接口使用的本地服務(wù),如果大家想練手,可以使用公司項(xiàng)目或網(wǎng)上項(xiàng)目自行實(shí)戰(zhàn),希望大家以后多多支持腳本之家!
- 使用Python requests庫(kù)發(fā)送JSON數(shù)據(jù)的POST請(qǐng)求步驟
- python如何使用requests提交post請(qǐng)求并上傳文件(multipart/form-data)
- python中Requests發(fā)送json格式的post請(qǐng)求方法
- python?requests.post請(qǐng)求404問(wèn)題及解決方法
- 詳解python requests中的post請(qǐng)求的參數(shù)問(wèn)題
- python爬蟲(chóng)使用requests發(fā)送post請(qǐng)求示例詳解
- python利用requests庫(kù)模擬post請(qǐng)求時(shí)json的使用教程
- Python中Requests POST請(qǐng)求解讀
相關(guān)文章
用Python實(shí)現(xiàn)斐波那契(Fibonacci)函數(shù)
這篇文章主要介紹了用Python實(shí)現(xiàn)斐波那契(Fibonacci)函數(shù)的相關(guān)資料,需要的朋友可以參考下2016-03-03
Python調(diào)用Pandas實(shí)現(xiàn)Excel讀取
這篇文章主要為大家介紹了在Python中如何調(diào)用Pandas實(shí)現(xiàn)Excel文件的讀取,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04
python實(shí)現(xiàn)去除下載電影和電視劇文件名中的多余字符的方法
這篇文章主要介紹了python實(shí)現(xiàn)去除下載電影和電視劇文件名中的多余字符的方法,可以批量修改視頻文件名稱,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
使用python繪制cdf的多種實(shí)現(xiàn)方法
今天小編就為大家分享一篇使用python繪制cdf的多種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python OpenCV實(shí)現(xiàn)基本圖形繪制
這篇文章主要介紹了Python OpenCV實(shí)現(xiàn)基本圖形繪制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

