从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)    # 请求数据

 

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

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

相关文章

【Python可视化实战】钻石数据可视化

一、项目引言 1.背景和目标 钻石作为一种珍贵的宝石,其价格受到多种因素的影响。为了深入了解钻石价格的决定因素,我们收集了大量关于钻石的数据,并希望通过数据可视化来揭示钻石特征与价格之间的关系。 2.内容 收集钻石的各项特征数据&a…

【大数据】分布式协调系统 Zookeeper

分布式协调系统 Zookeeper 1.Zookeeper 的特点2.Zookeeper 的数据结构3.Zookeeper 的应用场景3.1 统一命名服务3.2 统一配置管理3.3 统一集群管理3.4 服务器动态上下线3.5 软负载均衡 Zookeeper 是 Apache 开源的一个顶级项目,目的是为分布式应用提供协调服务&#…

IO进程线程 day4

进程状态间的转化 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <head.h> int main(int argc, const char *argv[]) {FILE *fp1NULL,*fp2NULL;//定义两个文…

【Java基础篇】常见的字符编码、以及它们的区别

常见的字符编码、以及它们的区别 ✔️ 解析✔️扩展知识仓✔️Unicode和UTF-8有啥关系?✔️有了UTF-8&#xff0c;为什么要出现GBK✔️为什么会出现乱码 ✔️ 解析 就像电报只能发出 ”滴” 和 ”答” 声一样&#xff0c;计算机只认识 0 和 1 两种字符&#xff0c;但是&#x…

【驱动序列】C#获取电脑硬件基本组合以及基础信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读《小5讲堂之知识点实践序列》文章。 这是2024年第7篇文章&#xff0c;此篇文章是C#知识点实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 要开发一款驱动小助手&…

vue封装基础input组件(添加防抖功能)

先看一下效果&#xff1a; // 调用页面 <template><div><!-- v-model&#xff1a;伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…

第3章 【例题】(完整版)

目录 前言 【例3.1】有关成绩结构体的例子 【例3.2】使用Score类的完整程序 【例 3.3】一个存在错误的程序 【例3.4】用对象赋值语句的例子 【例3.5】为类Score定义一个构造函数 【例3.6】建立对象的同时&#xff0c;用构造函数给数据成员赋初值 【例3.7】用成员初始…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

Vue3中配置env环境变量

什么时候会用到这个呢&#xff0c;比如我们的后端开发有多名&#xff0c;很多时候需要切换调用不同人的接口地址&#xff0c;或者在打包的时候&#xff0c;需要指定环境中的后台接口地址&#xff0c;那么我们频繁修改代码&#xff0c;就很麻烦&#xff0c;这个时候&#xff0c;…

burpsuite模块介绍之项目选项

使用该模块中的功能实现对token的爆破 靶场搭建:phpstudy的安装与靶场搭建 - junlin623 - 博客园 (cnblogs.com) 实现 1)先抓个包 2)设置宏 要实现我们爆破的时候请求的token也跟靶场一样一次一换从而实现爆破,那就需要用到项目选项中的宏(预编译功能)

MathType2024MAC苹果电脑版本下载安装图文教程

在数学和科学的世界里&#xff0c;表达精确的方程式和化学公式是至关重要的。MathType作为一款及其优秀且有全球影响力的数学公式编辑器&#xff0c;让这一切变得触手可及。MathType Mac版已全新升级&#xff0c;作为Microsoft Word和PowerPoint的Add-In插件&#xff0c;为您的…

Js的String的replace(和replaceAll(

EcmaJavascriptJs的String的 replace( 和 replaceAll( 方法 String.prototype.replaceString.prototype.replaceAll 相同点 都是String.prototype的函数都是用于字符串替换都是两个参数第一个参数都可以是正则或字符串第二参数都可以是字符串或者回调函数, 回调会传入一个参…

如何选择合适的语音呼叫中心?

市场上不同的语音呼叫中心提供商&#xff0c;都有其独特的优势和不足。企业在选择语音呼叫中心服务公司时&#xff0c;主要考虑以下因素&#xff1a;服务质量、价格、技术支持、客户支持等。 首先&#xff0c;服务质量是选择语音呼叫中心需关注的最重要因素之一。 为确保语音…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查看f…

linux安装nodejs

一&#xff0c;yum安装 yum -y install nodejs 二&#xff0c;下载安装包安装 官网下载地址&#xff1a;Download | Node.js 建议安装低版本的&#xff0c;安装高版本的会有很多依赖&#xff0c;处理起来非常麻烦&#xff0c;还浪费时间 [rootmaster1 local]# wget https://…

全解析阿里云Alibaba Cloud Linux镜像操作系统

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版&#xff0c;针对阿里云服务器ECS做了大量深度优化&#xff0c;Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS&#xff0c;Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

conda环境下Could not create share link解决方法

1 问题描述 在运行chatglm-6B项目时&#xff0c;运行python web_demo.py&#xff0c;出现如下错误&#xff1a; (chatglm) [rootlocalhost ChatGLM2-6B]# python web_demo.py Loading checkpoint shards: 100%|██████████████████████████████…

SwiftUI之深入解析如何创建一个灵活的选择器

一、前言 在 Dribbble 上找到的设计的 SwiftUI 实现时&#xff0c;可以尝试通过一些酷炫的筛选器扩展该项目以缩小结果列表。筛选视图将由两个独立的筛选选项组成&#xff0c;两者都有一些可选项可供选择。但是&#xff0c;在使用 UIKit 时&#xff0c;总是将这种类型的视图实…

RK3568 学习笔记 : ubuntu 20.04 下 Linux-SDK 镜像烧写

前言 开发板&#xff1a;【正点原子】ATK-DLRK3568 开发板&#xff0c;编译完 Linux-SDK 后&#xff0c;生成了相关的镜像文件&#xff0c;本篇记录一下 镜像烧写&#xff0c;当前编译环境在 VMware 虚拟机中&#xff0c;虚拟机系统是 ubuntu 20.04 此次烧写还算顺利&#xff…

Callback Hook

一、Callback Hook 函数名&#xff1a;useCallback 用于得到一个固定引用值的函数&#xff0c;通常用它进行性能优化。 useCallback: 该函数只需要传入两个参数&#xff1a;一个回调函数和一个依赖数组即可。 1.函数&#xff0c;useCallback会固定该函数的引用&#xff0c;…