feign post 传递空值_Python接口自动化-requests模块之post请求

1d99d811e48c630e81275e7346382921.png

在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之get请求,介绍了requests模块、get请求及响应结果详解。以下,主要介绍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请求参数解析:

  • url: 请求的url,必填;
  • data: 选填,请求参数;
  • json: 选填,请求参数;
  • kwargs:选填,可以传入headers、cookies等。

二、data、json区别

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

447656fc324740f2b2ed2ff889acd92e.png

举个栗子:

data 

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

那如果想把字典转换为json字符串呢,需要引用json模块。

import 

敲黑板

  • 不管json是str还是dict,如果不指定headers中的content-type,默认为application/json;
  • data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式;
  • data为str时,如果不指定content-type,默认为application/json。

025458bf920b335ceb1025a58b1f4616.png

重点来了,post请求参数到底是传data还是json,这时候我们要看请求头里的content-type类型(具体参照接口文档,没有接口文档的抓包)。

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

d2ad000e97fd4fb3ea212f5bca953796.png

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

b4f99987da3e63ef0158d2853bff8ef8.png

ec11ddf168dae07e5ed91f71a123104d.png

三、form形式发送post请求

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

# 导入requests模块

响应结果为:

{
    

四、json形式发送post请求

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

# 导入requests模块

响应结果为:

{
  

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

d6a397de74019b4338156359cd52369f.png

先按我们正常思维走一波:

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 

总结:本文主要讲解post源码,data、json参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战。

下一篇介绍:接口自动化之 cookie、session原理及应用。

喜欢的朋友,可以关注微信公众号:ITester软件测试小栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值