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-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。

举个栗子:

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参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59941.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】学习汇总(完整思维导图)

用心打造超详细MySQL基础学习教程,文末附系列完整思维导图 内容导航 新手村 SQL入门(一)常见函数使用(二)约束(三)多表查询(四)事务(五) 进阶路 存储引擎(六) SQL性能分析 (七) 索引 (八) SQL优化(九) 视图(十) 存储过程(十一) 触发器(十二) 锁(十三) MySQL管理(十四)…

SpringBoot3---核心特性---2、Web开发I

星光下的赶路人star的个人主页 如果我们总是等待绝对的一切就绪&#xff0c;那我们将永远无法开始 文章目录 1、WebMvcAutoConfiguration1.1 生效条件1.2 效果1.3 WebMvcConfigure接口1.4 静态资源规则代码1.5 EnableWebMvcConfiguration源码1.6 为什么容器中放一个WebMvcConfi…

Flask项目打包为exe(附带项目资源,静态文件)

1.在项目根目录创建my_app.spec文件&#xff0c;内容如下&#xff1a; # -*- mode: python ; coding: utf-8 -*-block_cipher Nonea Analysis([server.py], # flask入口pathex[],binaries[], datas[("E:/**/templates","/templates"),("E:/**/s…

(7.28-8.3)【大数据新闻速递】《数字孪生工业软件白皮书》、《中国绿色算力发展研究报告》发布;华为ChatGPT要来了

【数字孪生工业软件白皮书&#xff08;2023&#xff09;】 近日&#xff0c;第七届数字孪生与智能制造服务学术会议成功举行&#xff0c;2023《数字孪生工业软件白皮书》在会上正式发布。《白皮书》在《Digital Twin》国际期刊专家顾问委员会指导下&#xff0c;由国家重点研发计…

物理量时空属性内禀律

一、物理量时空属性内禀律&#xff1a; 1、物理量具有内在的时空属性&#xff0c;对所有表达式具有时空强制性。 2、物理量时空属性的计算等级较表达式低1个数学等级。 二、物理量时空属性的表示&#xff1a; 空间直线L的时空属性表示为&#xff1a; d(L)(1s,0t) &#xff…

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式&#xff08;不常用&#xff0c;因为要为每一个类配置TransactionProxyFactoryBean&#xff09; 2.2 基于AspectJ的XML方式&#xff08;常用&#xff0c;可配置在某些类下的所有子…

「从零入门推荐系统」22:chatGPT、大模型在推荐系统中的应用

作者 | gongyouliu 编辑 | gongyouliu 提示&#xff1a;全文2.5万字&#xff0c;预计阅读时长2小时&#xff0c;可以先收藏再慢慢阅读。 我们在上一章介绍了chatGPT、大模型的基本概念、核心技术原理等基础知识&#xff0c;有了这些背景知识的铺垫&#xff0c;下面我们来介绍ch…

使用tinyxml解析和修改XML文件

首先要清楚XML文件包含哪些元素&#xff1a; 他是由元素、文本或者两者混合物组成。元素可以拥有属性&#xff0c;元素是指从开始标签到结束标签的部分。 <?xml version"1.0" encoding"UTF-8" ?> <books><book id"1001">&…

day50-springboot+ajax分页

分页依赖&#xff1a; <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> 配置&#xff1a; …

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…

苹果电脑第三方应用程序卸载工具CleanMyMacX4.14

CleanMyMacX&#xff0c;这是一款可以帮助你快速识别并卸载电脑上的多个应用程序的第三方工具&#xff0c;省去了逐个卸载的繁琐步骤。 我们首先要到下载CleanMyMacX&#xff0c; CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 然后&#xff0c…

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持

从 TCP/IP 到 CCIP:Chainlink 与合约的互联网

未来已来。通过链上金融重塑资本市场预计将影响全球价值 8.67 万亿美元的资产的使用方式。 Chainlink 的跨链互操作性协议&#xff08;CCIP&#xff09;将会这一转型过程中发挥重要作用&#xff0c;这是区块链连接性和互操作性的突破&#xff0c;使得 DeFi 应用可以通过单一界…

前端实习day20

今天解决了不少bug&#xff0c;成就感满满&#xff0c;有几个问题困扰了我很久&#xff0c;我查阅了很多博客&#xff0c;终于找到解决思路&#xff0c;顺利解决&#xff0c;这里记录一下解决思路。 1、在通过this.$refs.layoutSide.style设置<a-layout-sider>的宽度时&…

Opencv-C++笔记 (14) : 霍夫变换(直线、圆)

文章目录 一、霍夫变换-直线1.1霍夫变换-直线 原理详解 二、霍夫圆检测 一、霍夫变换-直线 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 1、平面空间&#xff08;x,y&#xff09;到极坐标空间转换&#xff1b; 2、对极坐标进行变换&#xff0c;转化为…

服务器时钟同步

服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维&#xff0c;XXX服务器慢了2秒&#xff0c;导致XXX业务没有正常执行&#xff0c;请立即排查为啥会有时钟不同步的问题。 首先…

ubuntu22安装如何安装window软件(.exe)

ubuntu未提供相应程序安装包&#xff0c;如何使用的ubuntu22.04 安装window提供的exe程序呢&#xff1f; 这里我了解有两种方案&#xff1a; 使用模拟器进行window程序的运行&#xff0c;但是肯定会有相应的性能损耗如&#xff08;wine&#xff09;在linux上运行virtualbox或…

【数据分享】2013-2020年全国范围的逐日SO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们分享了来自于Zendo平台的1km分辨率的PM2.5、PM10和10km分辨率的SO2栅格数据&#xff08;均可查看之前文章获悉详情&#xff09;&#xff1a; 2000-2021年全国1km分辨率的逐日PM2.5栅格数据2000-2021年全国1k…

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数&#xff1a;⭐ 2、重载与重写区别 难度系数&#xff1a;⭐ 3、接口与抽象类的区别 难度系数&#xff1a;⭐ 4、深拷贝与浅拷贝的理解 难度系数&#xff1a;⭐ 5、sleep和wait区别 难度系数&a…

海外热门地区/国家常见主体证件示例

海外热门地区/国家常见主体证件示例&#xff08;本页面内容较多&#xff0c;你可以通过CtrlF搜索&#xff09; Overseas Popular Areas / Countries Examples of Common certificates &#xff08;This page has more content, you can search by CtrlF&#xff09; 中国香港…