从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-urlencoded
        headers=None,            # 请求头
        cookies=None,            # cookies
        files=None,              # 文件参数:Content-Type:multipart/form-data
        auth=None,               # 鉴权
        timeout=None,            # 超时
        allow_redirects=True,    # 是否重定向,True-是
        proxies=None,            # 代理设置
        hooks=None,              # 钩子:用来控制部分请求过程,或信号事件处理
        stream=None,             # 文件下载:用于控制是否立即下载响应体,默认情况下是stream=Ffalse
        verify=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)    # 请求数据

 

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

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

相关文章

出现 No such instance field: ‘XXXX‘ 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 作为一个全栈的开发玩家,需要调试前后端的数据传输,方便发现问题所在! 在debug整个项目的时候,检查传输数据的时候,发现前端可以传输,但是后端一直拿不到 出现如下问题:No such instance field: parentModel 截图…

【git使用】了解三种git commit合并的使用场景(rebase、merge、cherry-pick)

参考 【Git学习笔记】逃不掉的merge和rebase-腾讯云开发者社区-腾讯云git merge 和 git rebase - 知乎git cherry-pick 教程 - 阮一峰的网络日志 简单理解各种合并的方法 线性合并,使用 rebase —— feature 分支开发,提交前拉取 master 最新改动进行…

Java Review - MapStruct_使用 Intellij 和 Maven Debug 分析MapStruct实现原理

文章目录 Java动态编译、JSR 269 和 MapStructJSR 269JSR 269的工作原理MapStruct示例 MappingProcessor调试编译期生成的代码 Java动态编译、JSR 269 和 MapStruct Java动态编译是指在运行时动态地将Java源代码编译成字节码并加载到Java虚拟机中执行。 JSR 269 是Java规范请求…

使用Kafka与Spark Streaming进行流数据集成

在当今的大数据时代,实时数据处理和分析已经变得至关重要。为了实现实时数据集成和分析,组合使用Apache Kafka和Apache Spark Streaming是一种常见的做法。本文将深入探讨如何使用Kafka与Spark Streaming进行流数据集成,以及如何构建强大的实…

Java面试题之集合篇

前言 本篇主要总结JAVA面试中关于集合相关的高频面试题。本篇的面试题基于网络整理以及自己的总结编辑。在不断的完善补充哦。欢迎小伙伴们在评论区发表留言哦! 1、基础 1.1、Java 集合框架有哪些? Java 集合框架,大家可以看看 《Java 集…

读算法霸权笔记11_微目标

1. 脸书 1.1. 一份请愿书属于脸书了,而社交网络的算法会对如何最大限度地利用这份请愿书做出判断 1.1.1. 脸书的算法在决定谁能看到我的请愿书时会把所有因素都考虑在内 1.2. 通过改变信息推送的方式,脸书研究了我们…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要:本文介绍了 GlobalSearch 函数的使用句式(一)、三个运行案例(二)、以及 GlobalSearch 函数的参数设置(三、四)。详细介绍如下: 一、函数句法 Syntax gs GlobalSearch gs Glo…

java每日一题——输出星星塔(答案及编程思路)

前言: 打好基础,daydayup! 题目:请编写输出如下图的星星塔 编程思路:1,计算要输入几行;2,计算每行的⭐数量,及空格的数量;计算相应的关系; 如图:假…

【中小型企业网络实战案例 八】配置映射内网服务器和公网多出口、业务测试和保存配置

相关学习文章: 【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址 【中小型企业网络实战案例 四】配置OSPF动态路由协议【中小型企业网络实战案例 五】配置可…

react+AntDesign 之 pc端项目案例

1.环境搭建以及初始化目录 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start2.安装SCSS SASS 是一种预编译的 CSS,支持一些比较高级的语法,…

优化企业运营,深入探索SAP库存管理解决方案

SAP库存管理是SAP提供的一款领先的企业库存管理解决方案。它致力于帮助企业实现对库存的全面掌控,优化供应链管理,降低库存成本,提高客户满意度。这个功能强大的系统为企业提供了丰富的仓储管理功能,如库存盘点、物料追踪、供应商…

C# 使用Microsoft消息队列(MSMQ)

写在前面 Microsoft Message Queuing (MSMQ) 是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。 使用消息队列可以实现异步通讯,无需关心接收端是否在…

CCNP课程实验-06-EIGRP-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错误1:没有配置IP地址,IP地址宣告有误错误2:R3配置了与R1不同的K值报错了。错误3:R4上的AS号配置错,不是1234错误4:R2上配置的Key-chain的R4上配置的Key-chain不一致…

实时记录和查看Apache 日志

Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器,保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件,监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…

pinia 给 state 指定变量类型

pinia 给 state 指定变量类型 问题描述 自从用 vitetsvue3 以来,我一直有一个很大的疑问,就是 pinia 中的 state 变量类型该从哪定义,如何定义它? 因为我在使用未定义类型的 state 变量的时候一直会有一个提示,提示说…

HttpSession的使用

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

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

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

JavaWeb——后端之maven

三、后端Web开发 1. Maven 1.1 概念 概念: 一款用于管理和构建java项目的工具,是apache下的一个开源项目 作用: 依赖管理:jar包,避免版本冲突问题——不用手动导jar包,只需要在配置文件(pom…

burpsuite模块介绍之项目选项

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

CSS学习之路: 基础学习篇

css基础 一、css3 概述 1.1、什么是css Cascading style sheets 层叠样式表,级联样式表,简称样式表 1.2、css作用 对页面中html元素进行美化 1.3、HTML和css的关系 HTML:负责页面结构的搭建,负责数据的展示CSS:…