当前位置: 首页 > news >正文

Python接口自动化-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-likeobject 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请求参数解析:

  • url: 请求的url,必填;

  • data: 选填,请求参数;

  • json: 选填,请求参数;

  • kwargs:选填,可以传入headers、cookies等。

二、data、json区别 

小伙伴们看完可能有点懵逼,data和json有啥区别呀,什么时候传入data,什么时候传入json。

举个栗子:

data = {"name":"vivi"
}
print(type(data))

聪明的小伙伴立即抢答了,打印的是字典类型。

那如果想把字典转换为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请求参数到底是传data还是json,这时候我们要看请求头里的content-type类型(具体参照接口文档,没有接口文档的抓包)。

如果请求头中content-type为application/json,  为json形式,post请求使用json参数。

如果请求头中content-type为application/x-www-form-urlencoded,为表单形式,post请求时使用使用data参数。

 

三、form形式发送post请求

当前接口的请求类型为application/x-www-form-urlencoded。

# 导入requests模块
import requests
# 请求url
url = "http://127.0.0.1:8000/user/login"
# 请求参数
payload = {"mobilephone":"1530272****","pwd":"123456"
}
# form表单形式,参数用data
res = requests.post(url, data=payload)
print(res.text)

响应结果为:

{"status": 1,"code": "10001","data": null,"msg": "登录成功"
}
四、json形式发送post请求

当前接口的请求类型为application/json。

# 导入requests模块
import requests
# 请求的url地址
url = 'http://127.0.0.1:8000/user/login/'
# 请求头
headers = {"content-type":"application/json"}
# payload 为传入的参数
payload = {"username":"vivi","password":"123456","remember_me":"false"}
# json形式,参数用json
res = requests.post(url,json=payload,headers=headers)
print(res.text)

响应结果为:

{"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY1OTUyOTEsImVtYWlsIjoidml2aUBxcS5jb20ifQ.1RGrO6hSWHi9RDXjYuqY0UCPKMmQvaybpHvYqC0dCis","user_id": 1,"username": "vivi"
}

问题来了,如果请求类型为application/json,我偏要传入data参数呢?

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)

响应结果:请求错误

{"code":400,"data":[],"message":"Input error"}

请求类型为application/json,如果想用data传参,需要将字典类型数据转换为json字符串。

import requests
import json
payload = {"username":"vivi","password":"123456","remember_me":"false"}
header = {"content-type":"application/json"}
# 字典转换为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参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:点击右边链接领取:软件测试全套资料分享      

http://www.lryc.cn/news/191052.html

相关文章:

  • DDoS检测防御实现方案
  • ArcGIS: 第二届全国大学生GIS技能大赛(广西师范学院)详解-下午题
  • vue七牛云视频直传
  • 云原生Kubernetes:K8S集群版本升级(v1.20.15 - v1.22.14)
  • VUE树结构实现
  • Node.js 正在逐渐被淘汰!Bun 1.0 正在改变 JavaScript 的游戏规则
  • [Machine Learning][Part 5]监督学习——逻辑回归
  • whistle安卓手机抓包(图文详解)
  • 【经典排序算法 time: 2023-10-12】冒泡排序(层层优化改进)
  • 【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(Matlab代码实现)
  • 4、在docker容器内的tomcat 中发布项目
  • 数学建模——人工神经网络模型
  • java合成多个pdf为一个pdf
  • “高级Vue状态管理 - Vuex的魅力与应用“
  • Vue整合
  • 探秘PMP和六西格玛的不同:哪一个能为你的职业生涯加分?
  • 大数据学习(3)-hive分区表与分桶表
  • JS 原生实现触底加载
  • 结构体,位段!
  • 当10年程序员是什么体验?存款几位数?
  • ExoPlayer架构详解与源码分析(4)——整体架构
  • rust文件读写
  • 腾讯云我的世界mc服务器配置选择和价格表
  • 基于安卓android微信小程序的旅游系统
  • 文本编辑器去除PDF水印
  • kubernetes负载感知调度
  • Lock使用及效率分析(C#)
  • 安卓三防平板在行业应用中有哪些优势
  • 2015架构真题(五十)
  • VScode Invoke-Expression: 无法将参数绑定到参数“Command”,因为该参数为空字符串