从0开始python学习-39.requsts库
目录
HTTP协议
1. 请求
2. 响应
Requests库
1. 安装
2. 请求方式
2.1 requests.请求方式(参数)
2.2 requests.request()
2.3 requests.session().request()
2.4 三种方式之间的关联
3. 请求参数
3.1 params:查询字符串参数
3.2 data:Form表单参数
3.3 json:json参数
3.4 files:文件参数
4. 响应内容
HTTP协议
1. 请求
1.1 请求行:请求方式,请求路径,协议
1.2 请求头
- Content-Type:客户端发送的数据格式
- application/x-www-form-urlencoded:表单格式
- application/json:json数据
- multipart/form-data:文件上传
- application/octrent-stream:二进制文件上传
- Accept:接收的数据格式
- X-Requested-with:异步请求
- User-Agent:客户端类型
- Cookie:Cookie信息
1.3 请求正文; 请求数据,字节流
2. 响应
2.1 响应行:状态码,状态信息
2.2 常见状态码:
-
200 请求成功
-
201 创建成功
-
204 没有内容可响应
-
301 永久重定向
-
302 临时重定向
-
401 没有提高身份信息
-
403 权限不足
-
404 资源不存在
-
405 请求方法不允许
-
429 请求太频繁
-
500 本地服务器挂了
-
502 远程服务器挂了
2.3 响应头--示例:Content-Type: image/png
2.4 响应数据:字节流
Requests库
1. 安装
pip install requests
2. 请求方式
2.1 requests.请求方式(参数)
这里请求方式常用的基本上就是get,post,delete,put这几种,其中最常用的就是get和post
requests.get(url, params=None, **kwarg)
requests.post(url, data=None, json=None, **kwargs)
requests.delete(url, **kwarg)
requests.put(url, data=None, **kwargs)
2.2 requests.request()
requests.request(method, url, **kwargs)
从原码可以看到method其实就是2.1中的那几种请求方式
查看2.1中请求方式原码可以看到,2.1方法调用的底层代码其实就是2.2的方法
2.3 requests.session().request()
通过session的方式调用,可以够自动的处理有cookie关联的接口,当有cookie需要关联是建议使用这种请求方式
requests.session().request(self,method, # 请求方式url, # 请求路径params=None, # params参数:查询字符串参数,在接口路径后面以?传递的参数,多个参数之间用&分隔data=None, # 表单参数:Content-Type:application/x-www-form-urlencodedheaders=None, # 请求头cookies=None, # cookiesfiles=None, # 文件参数:Content-Type:multipart/form-dataauth=None, # 鉴权timeout=None, # 超时allow_redirects=True, # 是否重定向,True-是proxies=None, # 代理设置hooks=None, # 钩子:用来控制部分请求过程,或信号事件处理stream=None, # 文件下载:用于控制是否立即下载响应体,默认情况下是stream=Ffalseverify=None, # 证书cert=None, # ca证书json=None, # json参数:Content-Type:application/json)
1. 在请求行传递参数: method、url、params
2. 在请求头传递参数:headers、cookies
3. 在请求正文传递参数:data、files、json
(1). json和其他会冲突
(2). 单独传的情况:
-
data会进行编码 : content-type: application/x-www-form-urlencoded
-
files会增加分隔符 content-type: multipart/form-data;boundary=6d0c340d943891526bd14fab465025bb
-
josn格式直接传: content-type: application/json
-
data传递的不是字典时,没有 content-type
4. 设置请求接口时的传输细节:auth、timeout、allow_redirects、proxies、verify
2.4 三种方式之间的关联
requests.get -> requests.request("GET") -> Session().request("get")
requests.post -> requests.request("post") -> Session().request("post")
3. 请求参数
3.1 params:查询字符串参数
params = {"name":"ces","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,params=params)
- params参数在接口路径后面以?传递的参数,多个参数之间用&分隔
- 对参数内容进行了urlencode编码(内容以ASCII的方式呈现)
3.2 data:Form表单参数
data = {"name":"张三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,data=data)
- 自动添加了一个请求头:Content-Type: application/x-www-form-urlencoded
- 对参数内容进行了urlencode编码
3.3 json:json参数
json = {"name":"张三","age":18}
url = 'http://192.168.1.1:8088/list'
requests.get(url=url,json=json)
- 添加请求头:Content-Type: application/json
- 对参数进行:Unicode编码
3.4 files:文件参数
上传已存在的文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads":open("D:/work/test.txt")}
requests.get(url=url, files=file)
- 添加请求头:Content-Type: multipart/form-data
- 构建了一个表单参数,把文件的内容以二进制的方式加到body里面
上传不存在的文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads":("test1.txt","test11111","text/plain")}
requests.get(url=url, files=file)
这里如果不知道上传的文件的Content-Type是啥可以直接进行百度然后找到对应的即可
上传多个文件
url = 'http://192.168.1.1:8088/list'
file = {"uploads1":open("D:/work/test.txt"),"uploads2":("test1.txt", "test11111", "text/plain")}
requests.get(url=url, files=file)
注意这里name不能重复了
同时传递表单参数和文件参数---此时表单不会进行urlencode编码
url = 'http://192.168.1.1:8088/list'
file = {"uploads1":open("D:/work/test.txt"),}
data = {"name":"张三","age":18}
requests.get(url=url, data=data, files=file)
因为文件上传方式会自动添加请求头:Content-Type: multipart/form-data,所以可以和表单一起同时传递
4. 响应内容
print(res.text) # 返回字符串类型的数据
print(res.content) # 返回二进制类型的数据
res.json() # 把json字符串转化为字典格式返回
print(res.status_code) # 状态码
print(res.reason) # 状态信息
print(res.cookies) # cookie信息
print(res.encoding) # 编码格式
print(res.headers) # 响应头
print(res.elapsed) # 耗时
print(res.request.method) # 请求方式
print(res.request.url) # 请求路径
print(res.request.headers) # 请求头
print(res.request.body) # 请求数据
相关文章:

从0开始python学习-39.requsts库
目录 HTTP协议 1. 请求 2. 响应 Requests库 1. 安装 2. 请求方式 2.1 requests.请求方式(参数) 2.2 requests.request() 2.3 requests.session().request() 2.4 三种方式之间的关联 3. 请求参数 3.1 params:查询字符串参数 3.2 data:Form表单…...

【面试高频算法解析】算法练习3 双指针
前言 本专栏旨在通过分类学习算法,使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目,帮助您深度理解每种算法,避免出现刷了很多算法题,还是一知半解的状态 专栏导航 二分查找回溯双指针滑动窗口深度优先搜索…...
React16源码: Why16, 研究源码的意义, 源码目录核心结构分析
为什么要选择React16 现在React18都早已实践很多,为何回过头来看16版本的代码理由如下 从实际出发,企业内老旧项目多为16版本,理解16的核心能够帮助我们快速解决问题16版本React是完全重写了核心代码, 是一次重大的更新 引入了 fiber 这个概…...

mybatis-flex笔记
MyBatis-Flex 的增删改功能 - MyBatis-Flex 官方网站https://mybatis-flex.com/zh/base/add-delete-update.html 代码https://gitee.com/hntianshu/mybatis-flex-test 一 新增数据 不忽略 null 值。 就是允许有null 忽略null 就是不允许有null BaseMapper 的接口提供了 inser…...

Debezium发布历史47
原文地址: https://debezium.io/blog/2019/02/13/debezium-0-9-1-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 0.9.1.Final 发布 二月 13, 2019 作者: Gunna…...
Python爬虫抓包常见问题解决
对于Python爬虫和Fiddler抓包,可能遇到的问题及解决: 代理设置错误:如果你在使用Python爬虫时遇到抓不到包的问题,首先应该检查你的浏览器代理设置是否正确。以Chrome为例,代理设置为:右上角菜单按钮>设…...
c++跨平台ui
fltk https://gitee.com/mirrors_fltk/fltk.git codeblock中有fltk项目开发模板,可以快速构建项目 wxwidget https://gitee.com/sofu456/wxWidgets.git git submodule update --init --recursive 打开demo和sample set(wxBUILD_SAMPLES ALL) set(wxBUILD_DEMOS ON) build/…...

stable diffusion 基础教程-提示词之艺术风格用法
展现夕阳 golden hour, (rim lighting):1.2, warm tones, sun flare, soft shadows, vibrant colors, hazy glow, painterly effect, dreamy atmosphere阴影 chiaroscuro, (high contrast):1.2, dramatic shadows, bold highlights, moody atmosphere, captivating inte…...

【日积月累】Java中 正则表达式
目录 日积月累】Java中 正则表达式 1.前言2.基本语法3.Pattern和Matcher类4.校验的表达式大全5.参考文章所属专区 日积月累 1.前言 正则表达式是一种用于匹配文本模式的语法,它通常与编程语言一起使用。在Java中,正则表达式用于匹配字符串,可以使用Pattern和Matcher类来实…...
Java调用百度云语音识别【音频转写】
百度云文档 ttps://ai.baidu.com/ai-doc/SPEECH/Bk5difx01 示例代码: import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.json.JSONObject; import org.springframework.stereotyp…...

pyparamvalidate 项目背景和需求分析
目录 一、前置说明1、总体目录2、本节目标 二、项目背景三、需求分析三、后置说明1、要点小结2、下节预告 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、本节目标 阐述 pyparamvalidate 项目背景和需求分析。 二、项目背景…...

Docker Linux快速安装及Nginx部署
前言 最近正在部署一套新的Linux服务器环境,基于Docker来部署所有的应用,顺便整理了一套经过验证的操作手册,以便大家遇到类似需求时,可以直接拿来用。 本文会涉及以下知识点:Docker的Linux安装和卸载、Docker用户组…...

Mac M1 Parallels CentOS7.9 Install Parallels Tools
一、挂载parallels-tools安装包 mkdir /media/cdrom/ mount /dev/cdrom /media/cdrom/ mount: /dev/sr0 写保护,将以只读方式挂载二、GCC升级 yum install -y centos-release-scl yum install -y devtoolset-8-gcc*# 切换当前会话中gcc版本为8 scl enable devtool…...

计算机网络物理层 习题答案及解析
2-1 下列选项中,不属于物理层接口规范定义范畴的是( D )。 A. 引脚功能 B. 接口形状 C. 信号电平 D. 传输媒体 【答案】D 【解析】 2-2 某网络在物理层规定,信号的电平范围为- 15V~15V , 电线长…...

【解决】Unity 设置跨设备分辨率表现
开发平台:Unity 2018版本以上 开发语言:CSharp 编程平台:Visual Studio 2022 问题描述 使用 UnityEngine.dll 中关于设置分辨率的方法时,无法满足应用以设定分辨率进行屏幕显示问题。因而造成画面不同程度的拉伸情况。而这种情…...
基于单片机的智能衣柜设计
一、摘要 随着科技的不断发展,人们对于生活品质的要求越来越高。智能衣柜作为智能家居的一个重要组成部分,能够为用户提供便捷、个性化的衣物管理服务。本文主要研究了基于单片机的智能衣柜设计,通过对硬件系统和软件系统的设计与实现&#…...

HttpSession的使用
1 HttpSession 概述 在 Java Servlet API 中引入 session 机制来跟踪客户的状态。session 指的是在一段时间内,单个客户与 Web 服务器的一连串相关的交互过程。在一个 session 中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同…...

人工智能在金融领域的应用存在的4大挑战
金融服务供应商应该有计划地应对AI面临的难题 金融行业投资人工智能热潮带来有关数据安全和透明度的新问题。由于数据管理实践随着新的 AI 解决方案的引入而不断发展,应对这些新问题以及金融服务领域 AI 面临的其他挑战尤为重要。各组织必须认识到可能面临以下挑战…...

EasyExcel写出包含多个sheet页的Excel
https://blog.csdn.net/qq_38751895/article/details/131852740...

分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】
分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-CNN-LSTM-Attention递归图优化卷积长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...