python接口自动化(八)--发送post请求的接口(详解)
简介
上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了。答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统或者软件、网站都是从登录开
始的,进入这扇门才可以发现里边的奥秘,所以首先介绍的第一个post请求肯定是登录了,但登录是最难处理的。如果把登录问题这只拦路虎解决了,那么后面问题都迎刃而解。
help函数
上篇介绍发送get请求的接口时,学习requests模块,是让大家去访问官方网站,查看官方文档;其实学习一个新的模块捷径,不用去百度什么的,直接用 help 函数就能查看相关注释和案例内容。

python发送get请求接口案例:

python发送post请求接口案例:

发送post请求的接口(dict参数)
上一篇,我们就见识过requests的强大功能和威力。寥寥几行代码就可以实现get和post的请求。介绍到这里想必大伙都迫不及待了,好,那我们来牛刀小试一下。
1、用上面给的python发送post请求接口案例,稍稍地做个简单修改,就可以发个简单的post 请求
2、便可以像官方文档给出的案例将payload 参数是字典类型(dict),传到如下图的 form 里

发送post请求的接口(json参数)
1、post 的 body 是 json 类型,也可以用 json 参数传入。
2、先导入 json 模块,用 dumps 方法转化成 json 格式。
3、返回结果,传到 data 里

请求头header
现在由于对接口安全性的要求,使得模拟登录越来越复杂,比上边介绍的基本内容要复杂很多。一般来说登陆只要涉及安全性方面考虑,那么登陆就会比较复杂。
1、以博客园为例,几年前模拟登陆,没有涉及安全性考虑相对简单。发展到现在其登录涉及安全性考虑,所以实际的情况要比上面讲的几个复杂很多,
2、我们在请求数据时也可以加上自定义的headers(通过headers关键字参数传递)有时候有的特殊的请求必须加上headers头信息,才回返回响应结果。例如:博客园登录时,将请求头 headers添加上,这里不是说博客园登录必须登录才能返回
响应结果,而是以其为例子来说明将请求头header参数加入到登录请求接口中。这里可以用抓包工具来看其登录时的请求头。如下是fiddler工具抓包时登录的请求头。
3、由于博客园的登录方式改变了,我们换一个例子演示。还是以官方文档给的网址演示如下
(1)抓包,查看其请求头,浏览器F12查看

Fiddler抓包查看请求头,结果如下:

实例代码和其结果:

遇到问题报错和解决办法:
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

小结
1、由于这里是 https 请求,直接发送请求会报错误:SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
2、可以加个参数:verify=False,表示忽略对 SSL 证书的验证,但是此时仍然会有警告:
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
3、这里请求参数 payload 是 json 格式的,用 json 参数传。将请求头写成字典格式,进行传参。
4、最后结果是 json 格式,可以直接用 r.json 返回 json 数据:
{'args': {}, 'data': '', 'files': {}, 'form': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '0', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}, 'json': None, 'origin': '222.128.10.95, 222.128.10.95', 'url': 'https://httpbin.org/post'}
5、json参数和dict的参数非常类似,都是key-value的形式,它们有何区别,欲知后事如何,且听下回分解。
python接口自动化(八)--发送post请求的接口(详解)的更多相关文章
- python+pytest接口自动化(5)-发送post请求
简介 在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递. 且协议中并没有规定post请求的请求数据必须使用什么样的编 ...
- Vue中发送ajax请求——axios使用详解
axios 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用 功能特性 在浏览器中发送 XMLHttpRequests 请求 在 node.js 中发送 htt ...
- Spring Boot之发送HTTP请求(RestTemplate详解)
原文作者:微笑面对生活 https://www.javazhiyin.com/19714.html#comment-345 RestTemplate是Spring提供的用于访问Rest服务的客户端,R ...
- python接口自动化之发送get(三)
1.安装requests requests是python的第三方库,需要进行安装.安装之前最好先关闭fiddler cmd(win+R快捷键)输入:pip install requests 其他命令: ...
- python接口自动化26-发xml格式post请求《转载》
python接口自动化26-发xml格式post请求 https://cloud.tencent.com/developer/article/1164987
- 发送post请求的接口
一.简介 所有系统或者软件.网站都是从登录开始,所以首先介绍的第一个post请求是登录. 二.help函数 学习一个新的模块捷径,直接用help()函数查看相关注释和案例内容 for example: ...
- Python操作redis系列以 哈希(Hash)命令详解(四)
# -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...
- Python中第三方库Requests库的高级用法详解
Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...
- 精讲RestTemplate第4篇-DELETE、PUT等请求方法使用详解
本文是精讲RestTemplate第5篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
随机推荐
- ScalaPB(2): 在scala中用gRPC实现微服务
gRPC是google开源提供的一个RPC软件框架,它的特点是极大简化了传统RPC的开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑中.作为一种google的最新RPC解决方案,gRPC具 ...
- SpringCloud实战-Eureka
熟悉微服务架构或Dubbo框架的都知道,微服务中最核心.最基础的组件就是注册中心了.下面利用Spring Cloud Eureka实现服务注册中心.并注册一个简单的服务提供者. 首先先创建一个spir ...
- CSS学习笔记二:css 画立体图形
继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...
- Mysql服务启动与关闭
启动: 在cmd中输入 net start mysql 关闭: 在cmd中输入 net stop mysql
- Spring通过构造方法注入的四种方式
通过构造方法注入,就相当于给构造方法的参数传值 set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选 的,构造注入的优势是通过构造强制依赖关系,不可能实例化不 完全的或无法使用的bean. Me ...
- 你不知道的JavaScript--Item19 执行上下文(execution context)
在这篇文章里,我将深入研究JavaScript中最基本的部分--执行上下文(execution context).读完本文后,你应该清楚了解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是如 ...
- python selenium模拟滑动操作
selenium.webdriver提供了所有WebDriver的实现,目前支持FireFox.phantomjs.Chrome.Ie和Remote quit()方法会退出浏览器,而close()方法 ...
- Redis系列-远程连接redis
假设两台redis服务器,ip分别为:192.168.1.101和192.168.1.103,如何在101上通过redis-cli访问103上的redis呢?在远程连接103之前,先讲下redis-c ...
- java.util.ConcurrentModificationException异常的解决
问题复现: List<String> list = new ArrayList<>();list.add("11");list.add("55&q ...
- Selenium 3 没办法启用指定的Firefox Profile
系统总会把profile复制到一个temp文件夹里,但是相关信息并不复制回去, 导致在测试注册登录功能时, 必须写在同一个脚本里:如果分成两段脚本, 登录会失败. public static void ...