网站首页 > 技术文章 正文
Requests是一个基于Apache2 Licensed 协议开源的Python HTTP库,使得Python轻松的向网站请求信息以及检查返回的响应。
Requests 继承了urllib2的所有特性,支持HTTP连接保持和连接池,支持使用Cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
本文主要介绍Python Requests的一些简单基本用法,高级特性将在后续文章中介绍。
若对您所有帮助,欢迎通过文章顶部“生机大会”活动页面,投票支持哦。
安装 Requests
我们在Windows 10,Python3环境中,通过pip安装requests模块,如下 :
发送请求
我们先看一下简单的例子
如上,发送一个完整的HTTP请求,只需要几行代码即可,简洁而优雅。发送其它方式的请求也是如此简洁,如下:
向URL中传递参数
有时候我们需要在 url中传递参数,就像浏览头条个人主页一样,url中就包含了mid=1615263538560013参数。我们可以自己拼接该URL,也可以使用 Requests提供的params参数实现参数的传递,如下:
如上,我们可以看到打印的请求url是一个拼接后的包含{'user_name': 'Jack', 'mobile': 'Tony'} 参数的url。
在GET请求中,我们使用 params参数传递数据,在POST请求中我们使用 data或 json参数传递数据。
获取响应内容
获取响应状态码
我们可以 response.status_code获取每次请求的响应状态,如下:
如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status方法会抛出一个 HTTPError异常,因此我们可以使用它直接来判断请求是否成功。
获取字符串方式的响应体
response.text 会自动根据响应头部的字符编码进行解码,如下:
获取字节方式的响应体
response.content 会自动为你解码 gzip 和 deflate 压缩,如下:
Requests 中也有一个内置的 Json 解码器,帮助我们处理 Json 响应内容,如下:
获取响应头
我们可以通过 response.headers 方法以字典对象存储服务器响应头,如下:
获取网页编码
我们可以通过 response.encoding 获取网页编码。
对 encoding修改后就直接会用修改后的编码去获取网页内容。
设置请求超时时间
我们可以通过 timeout参数设置超时时间,一旦超过这个时间还没获得响应内容,就会抛出requests.exceptions.ConnectTimeout异常。
POST请求方式
上面例子中,我们通过 GET请求方式介绍了 Requests基本的用法,在实际应用中除了GET请求方式,还有 POST请求方式也被广泛的应用。POST请求方式的使用与 GET方式并没有很大的区别,本质的区别在于它传递参数的方式并不像 GET方式一样,通过在url中拼接字段来发送请求,POST请求方式采取了相对更为安全的操作方式,通过form表单的方式来发送请求。
HTTP协议中规定 POST提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通过是根据请求头中的 Content-Type字段来判断请求中的消息主体是用何种方式进行编码,然后消息主体进行解析。具体的编码方式包括,包含以下几种:
以表单形式提交数据(application/x-www-form-urlencoded )
想要发送表单形式的数据,只需简单的传递一个字典给data参数,在发送请求的时候,会自动编码为表单的形式,例如:
以Json形式提交数据(application/json )
在很多情况下,想要发送的数据并非为表单形式,而是一个json格式的字符串,如果传递给data参数的内容不是一个Dict,而是一个String,那么在发送的时候,数据会被直接发送出去,不会自动编码为表单形式。
因此,想要在 POST请求中使用 data参数来传递 json格式的字符串,首先得把dict转为string,通常我们使用 json.dumps 方法,例如:
除了可以对 Dict编码后以String的方式传递参数外,还可以使用 json参数直接传递,在传递时会自行进行编码为string类型,如下:
以multipart形式提交数据(multipart/form-data)
Requests也支持以multipart形式发送 POST请求,只需将一文件传给 requests.post 的files参数就可以实现文件提交,如下:
我们也可以把字符串直接作为文件进行提交,如下:
?
猜你喜欢
- 2024-10-03 Python访问网络 urllib.request 发送HTTP 请求
- 2024-10-03 python模块之aioHttp 异步请求(在crm中,哪个模块用于跟踪和管理客户服务请求)
- 2024-10-03 推荐几个最佳python应用服务器(一起学习吧)
- 2024-10-03 关于爬虫,HTTP协议了解一下!(关于爬虫,http协议了解一下!正确的有)
- 2024-10-03 「Python」在HTTP请求使用长连接(keep-alive)提高传输效率
- 2024-10-03 干货分享丨Python的HTTP库及示例(http//www.python.org/downloads)
- 2024-10-03 微软太良心了,提供免费服务器可以搭建Python网站
- 2024-10-03 python爬虫必备库——requests(python爬虫需要的库)
- 2024-10-03 如何用Python语言开发大型服务器程序
- 2024-10-03 使用Python获取HTTP请求头数据(在python中用于获取用户输入的函数是)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)