requests库的使用

Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests 简单优雅,而且缺少了许多实用功能。所以,更推荐掌握 Requests 做接口测试,这也是互联网大厂流行的接口测试利器。

Requests 官方文档:

https://2.python-requests.org/en/master/

Requests 提供了几乎所有的 HTTP 请求构造方法,以及通过传入参数的方法,对发送的请求进行定制化的配置,可以用来应对各种不同的请求场景。

安装:pip install requests

一、HTTP请求构造

发送get请求

import requests
from requests.packages import urllib3urllib3.disable_warnings()
response = requests.get('https://mall.jctesting.cn/pc/',verify=False)
result = response.text
print(result)

1、verify=False 忽略https请求的SSL验证(SSL证书是由CA机构颁发的),urllib3.disable_warnings( )主要用于去除Requests 会抛出 SSLError;

2、response为一个对象:<class 'requests.models.Response'>;

3、通过调用该对象的text返回一个str类型HTML格式的响应结果

响应结果:

<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D"><head><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content=""><base href="/pc/"><link rel="preload" href="/pc/_nuxt/33543fd.js" as="script"><link rel="preload" href="/pc/_nuxt/26591e0.js" as="script"><link rel="preload" href="/pc/_nuxt/09b01ce.js" as="script"><link rel="preload" href="/pc/_nuxt/6acbd75.js" as="script"></head><body><div id="__nuxt"><style>#nuxt-loading{background:#fff;visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #000;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style><script>window.addEventListener("error",function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")})</script><div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div></div><script>window.__NUXT__={config:{app:{basePath:"/pc/",assetsPath:"/pc/_nuxt/",cdnURL:null}}}</script><script src="/pc/_nuxt/33543fd.js"></script><script src="/pc/_nuxt/26591e0.js"></script><script src="/pc/_nuxt/09b01ce.js"></script><script src="/pc/_nuxt/6acbd75.js"></script></body>
</html>

发送一个带参数的get请求

import requestsparams = {"name":"小米"}
response = requests.get('https://mall.jctesting.cn/api/pc/goodsList',params=params,verify=False)
print(type(response))
result = response.text
res_url = response.url
print(res_url)

response.url返回请求的完整Url:

https://mall.jctesting.cn/api/pc/goodsList?page_size=20&name=古

等价于

response = requests.get('https://mall.jctesting.cn/api/pc/goodsList?page_size=20&name=小米',verify=False)

响应内容介绍

response.encoding                       #获取当前的编码
response.encoding = 'utf-8'             #设置编码
response.text                           #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
response.content                        #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
response.headers                        #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
response.status_code                     #响应状态码
response.json()                         #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
response.raise_for_status()             #失败请求(非200响应)抛出异常
response = requests.get('https://mall.jctesting.cn/pc/goods_list?name=小米',verify=False)
print("当前编码:",response.encoding)  # 获取当前编码
print("字符串方式的响应体:",response.text) # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
print("服务器返回的响应头:",response.headers) # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
print("响应状态码:",response.status_code) # 响应状态码
print("json格式的响应体:",response.json()) # Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常

发送POST请求

通过调用mall.jctesting.cn商城的登录接口完成登录

api_url = "https://mall.jctesting.cn/api/account/login"
datas = {"account": "15200000001","password": "111111.","client": 5}response = requests.post(url=api_url,data=datas,verify=False)   # verify=False忽略ssl安全证书检验
print(response.json())

响应结果

{'code': 1, 'msg': '登录成功', 'data': {'id': 156, 'nickname': 'Jie', 'avatar': 'http://jc-mall1.oss-cn-shanghai.aliyuncs.com/uploads/images/2021052712154909b870403.png', 'level': 0, 'disable': 0, 'distribution_code': '7TZH6Z', 'token': '2b7e386c330c2bfdd88fc0565221a205'}, 'show': 0, 'time': '0.059077'}

在通过requests.post()进行POST请求时,传入报文的可选参数有两个,一个是data,一个是json;常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;当然现在更多接口,提交参数时需要以json格式提交,这个时候需要把字典形式的参数传递给json,requests内部会对字典类型的对象转换为json格式;

构造headers请求头

/api/cart/add 是mall.jctesting.cn商城的加入购物车接口

参数:

api_url = "https://mall.jctesting.cn/api/cart/add"
datas = {"item_id":4,"goods_num":1}
headers ={"token":"4abedc4a91674112b175fd2739f1fce3"}
r = requests.post(url=api_url, data=datas, headers=headers, verify=False)
r.json()

结果:

{'code': 1, 'msg': '加入成功', 'data': [], 'show': 0, 'time': '0.046635'}

headers参数接收一个字典类型的对象,构造请求头时构造一个字典对象传给headers参数

timeout参数

设定超时时间(秒),到达这个时间之后会停止等待响应

api_url = "https://mall.jctesting.cn/api/cart/add"
datas = {"item_id":4,"goods_num":1}
headers ={"token":"4abedc4a91674112b175fd2739f1fce3"}
r = requests.post(url=api_url, data=datas, headers=headers,timeout=0.001,verify=False)
r.json()

结果: 

requests.exceptions.ProxyError: HTTPSConnectionPool(host='mall.jctesting.cn', port=443): Max retries exceeded with url: /api/cart/add (Caused by ProxyError('Cannot connect to proxy.', timeout('timed out')))

文件上传

使用Requests模块,进行上传文件可通过files参数来定义,注:上传的files需要是二进制模式读取即'rb'模式

 

import requestsfiles = {'file':open('userId.txt', 'rb')}
response = requests.post(url, files=files)
print(response.text)

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不学前沿技术与朽木浮草何异 ?Java21新特性

不学前沿技术与朽木浮草何异 &#xff1f;Java21新特性 文章目录 不学前沿技术与朽木浮草何异 &#xff1f;Java21新特性JEP 430&#xff1a;字符串模板&#xff08;预览&#xff09;JEP431&#xff1a;序列化集合JEP 439&#xff1a;分代 ZGCJEP 440&#xff1a;记录模式JEP 4…

自定义包的设计与实现

这是一个 CPacket 类&#xff0c;用于解析包含固定格式的数据。该类的成员变量包括固定包头 sHead、包长度 nLength、控制命令 sCmd、包数据 strData 和和校验 sSum。 构造函数&#xff1a; CPacket()&#xff1a;默认构造函数&#xff0c;初始化成员变量。 CPacket(const B…

WindowsOS

C:. ├─PerfLogs&#xff0c;系统日志文件夹 ├─Program Files&#xff0c;程序文件 ├─Program Files&#xff08;x86&#xff09;&#xff0c;程序文件&#xff08;x86&#xff09; ├─ProgramData&#xff0c;程序数据 ├─Windows&#xff0c;Windows系统文件夹 └─Us…

数据结构排序小结

排序类型小结 &#x1f4a6; 插入排序直接插入排序希尔排序 &#x1f4a6; 选择排序直接选择排序堆排序 &#x1f4a6; 交换排序冒泡排序快速排序&#x1f43e;霍尔版本补坑位版本前后指针版本非递归版本 &#x1f4a6; 归并排序递归版本非递归版本 &#x1f4a6; 性能测试 &am…

Kotlin 教程(环境搭建)

Kotlin IntelliJ IDEA环境搭建 IntelliJ IDEA 免费的社区版下载地址&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE 下载安装后&#xff0c;我们就可以使用该工具来创建项目&#xff0c;创建过程需要选择 SDK&#xff0c; Kotlin 与 JDK 1.6 一起使…

【数据结构与算法】6.栈

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

Qt编写手机端视频播放器/推流工具/Onvif工具

一、视频播放器 同时支持多种解码内核&#xff0c;包括qmedia内核&#xff08;Qt4/Qt5/Qt6&#xff09;、ffmpeg内核&#xff08;ffmpeg2/ffmpeg3/ffmpeg4/ffmpeg5/ffmpeg6&#xff09;、vlc内核&#xff08;vlc2/vlc3&#xff09;、mpv内核&#xff08;mpv1/mp2&#xff09;、…

《HTML 简易速速上手小册》第1章:HTML 入门(2024 最新版)

文章目录 1.1 HTML 简介与历史&#xff08;&#x1f609;&#x1f310;&#x1f47d;踏上神奇的网页编程之旅&#xff09;1.1.1 从过去到现在的华丽蜕变1.1.2 市场需求 —— HTML的黄金时代1.1.3 企业中的实际应用 —— 不只是个网页1.1.4 职业前景 —— 未来属于你 1.2 基本 H…

第八篇【传奇开心果系列】beeware的toga开发移动应用示例:实现消消乐安卓手机小游戏

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、初步实现四、扩展思路五、实现游戏逻辑示例代码六、实现界面设计示例代码七、实现增加关卡和难度示例代码八、实现存档和排行榜示例代码九、实现添加特殊方块和道具示例…

C++提取ICO图标(PE文件资源提取)

最近需要写一个提取EXE或者DLL图标资源的功能, 网上找了很久, 要么功能不好用, 最后结果如下: 1.很多是加载为HICON句柄后转换为图片保存, 全损画质..., 2.后来找了个还能用的, 详见 https://github.com/TortoiseGit/TortoiseGit/blob/master/src/Utils/IconExtractor.cpp …

[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

网络会话管理

文章目录 一 什么是会话1 生活中会话2 Web中会话3 会话技术 二 Cookie1 原理2 使用2.1 添加cookie2.2 遍历cookie2.3 设置cookie的过期时间 3 特点 三 Session1 原理2 使用2.1 创建session对象2.2 不同的servlet间共享session对象中数据2.3 web.xml中设置session的超时时间 3 禁…

Keil软件某些汉字输出乱码,0xFD问题,51单片机

1. 问题 keil软件输入某些汉字的时候会输出乱码&#xff0c;例如&#xff1a;升、 数 2. 原因 keil软件会忽略0xFD。 升的GB2312编码为 0xc9fd&#xff0c;keil解析为0xc9数的GB2312编码为 0xcafd&#xff0c;keil解析为0xca 关于Keil软件中0xFD问题的说明 3. 解决方案1 …

E5071C 是德科技网络分析仪

181/2461/8938产品概述&#xff1a; E5071C ENA 矢量网络分析仪&#xff0c;9 kHz 至 20 GHz&#xff0c;配有增强型 TDR 测量选件。 E5071C 是大规模无源元器件测试的理想解决方案。 它具有出色的测量性能&#xff0c;有助于提高测试吞吐量&#xff0c;尤其是与 E5092A 多端…

力扣题目训练(3)

2024年1月27日力扣题目训练 2024年1月27日力扣题目训练290. 单词规律292. Nim 游戏303. 区域和检索 - 数组不可变91. 解码方法92. 反转链表 II41. 缺失的第一个正数 2024年1月27日力扣题目训练 2024年1月27日第三天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包…

SQL注入:盲注

SQL注入系列文章&#xff1a; 初识SQL注入-CSDN博客 SQL注入&#xff1a;联合查询的三个绕过技巧-CSDN博客 SQL注入&#xff1a;报错注入-CSDN博客 目录 什么是盲注&#xff1f; 布尔盲注 手工注入 使用python脚本 使用sqlmap 时间盲注 手工注入 使用python脚本 使…

聊聊鸿蒙HarmonyOS NEXT 的技术细节

上周&#xff0c;华为在深圳举办了“鸿蒙生态千帆启航仪式”&#xff0c;这也是华为鸿蒙开启生态进阶的信号。在政策的叠加下&#xff0c;鸿蒙未来必定是势不可挡的。我们这些程序员也得与时俱进&#xff0c;熟悉鸿蒙的技术和细节&#xff0c;别在经济寒冬里被淘汰了。 官方称…

scrapy框架核心知识Spider,Middleware,Item Pipeline,scrapy项目创建与启动,Scrapy-redis与分布式

scrapy项目创建与启动 创建项目 在你的工作目录下直接使用命令: scrapy startproject scrapytutorial运行后创建了一个名为scrapytutorial的爬虫工程 创建spider 在爬虫工程文件内&#xff0c;运行以下命令&#xff1a; scrapy genspider quotes创建了名为quotes的爬虫 …

Python在无人机器人

Python在无人机器人战争研发开发中具有重要性&#xff0c;主要体现在以下几个方面&#xff1a; 简洁易懂的语法&#xff1a;Python语法简洁易懂&#xff0c;容易上手&#xff0c;使得开发人员能够快速构建无人机器人应用程序&#xff0c;并且减少编码错误的可能性。 强大的科学…

【分治专题】详解快排类型4道题

本文讲解分治下的快排类型的4道题&#xff0c;在讲解题目的同时提供AC代码&#xff0c;点击题目即可打开对应链接 目录 1、颜色分类 2、排序数组 3、数组中的第K个最大元素 4、库存管理 III 1、颜色分类 解法&#xff08;快排思想--三指针法使数组分三块&#xff09;&…