Python接口自動化之淺析requests模塊post請求
在上一篇Python接口自動化測試系列文章:Python接口自動化之淺析requests模塊get請求,介紹了requests模塊、get請求及響應(yīng)結(jié)果詳解。接下來介紹requests模塊中的post請求的使用。
一、源碼解析
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請求參數(shù)解析:
url:
請求的url,必填;
data:
選填,請求參數(shù);
json:
選填,請求參數(shù);
kwargs:
選填,可以傳入headers、cookies等。
二、data、json區(qū)別
小伙伴們看完可能有點懵逼,data和json有啥區(qū)別呀,什么時候傳入data,什么時候傳入json。
舉個栗子:
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,默認為application/json;
- data為dict時,如果不指定content-type,默認為application/x-www-form-urlencoded,相當于普通form表單提交的形式;
- data為str時,如果不指定content-type,默認為application/json。
重點來了,post請求參數(shù)到底是傳data還是json,這時候我們要看請求頭里的content-type類型(具體參照接口文檔,沒有接口文檔的抓包)。
如果請求頭中content-type為application/json, 為json形式,post請求使用json參數(shù)。
如果請求頭中content-type為application/x-www-form-urlencoded,為表單形式,post請求時使用使用data參數(shù)。
三、form形式發(fā)送post請求
當前接口的請求類型為application/x-www-form-urlencoded。
# 導入requests模塊 import requests # 請求url url = "http://127.0.0.1:8000/user/login" # 請求參數(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請求
當前接口的請求類型為application/json。
# 導入requests模塊 import requests # 請求的url地址 url = 'http://127.0.0.1:8000/user/login/' # 請求頭 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é)果為:
無響應(yī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é)果:請求錯誤
{"code":400,"data":[],"message":"Input error"}
請求類型為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)用場景及實戰(zhàn)。接口使用的本地服務(wù),如果大家想練手,可以使用公司項目或網(wǎng)上項目自行實戰(zhàn)。
本文主要講解post源碼,data、json參數(shù)應(yīng)用場景及實戰(zhàn)。接口使用的本地服務(wù),如果大家想練手,可以使用公司項目或網(wǎng)上項目自行實戰(zhàn),希望大家以后多多支持腳本之家!
相關(guān)文章
python opencv 圖像邊框(填充)添加及圖像混合的實現(xiàn)方法(末尾實現(xiàn)類似幻燈片漸變的效果)
這篇文章主要介紹了python opencv 圖像邊框(填充)添加及圖像混合(末尾實現(xiàn)類似幻燈片漸變的效果),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Python一直報錯SyntaxError:invalid?syntax的解決辦法
SyntaxError: invalid syntax 這個報錯經(jīng)常遇見,但是總感覺自己的代碼沒有問題,根據(jù)報錯提示的行也找不到錯誤,這些情況以及解決方法都有哪些呢?這篇文章主要給大家介紹了關(guān)于Python一直報錯SyntaxError:invalid?syntax的解決辦法,需要的朋友可以參考下2022-09-09Python中關(guān)鍵字is與==的區(qū)別簡述
這篇文章主要介紹了Python中關(guān)鍵字is與==的區(qū)別,對于Python初學者有一定的借鑒學習價值,需要的朋友可以參考下2014-07-07Python爬蟲獲取op.gg英雄聯(lián)盟英雄對位勝率的源碼
這篇文章主要介紹了Python爬蟲獲取op.gg英雄聯(lián)盟英雄對位勝率,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01Python中enumerate()函數(shù)詳細分析(附多個Demo)
Python的enumerate()函數(shù)是一個內(nèi)置函數(shù),主要用于在遍歷循環(huán)中獲取每個元素的索引以及對應(yīng)的值,這篇文章主要介紹了Python中enumerate()函數(shù)的相關(guān)資料,需要的朋友可以參考下2024-10-10python 處理telnet返回的More,以及get想要的那個參數(shù)方法
今天小編就為大家分享一篇python 處理telnet返回的More,以及get想要的那個參數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02