当前位置: 首页 > news >正文

【Python第三方库】Requests全面解析

在这里插入图片描述

文章目录

  • 安装
  • 基本用法
    • 测试网站
    • 发送GET请求
    • 发送POST请求
    • 更多请求
    • 请求参数
    • 请求头
    • 其他常用请求属性
    • 处理响应
      • 响应状态码
      • 响应内容
    • 处理超时
    • 处理异常

requests 是一个非常流行的 Python HTTP 库,用于发送所有类型的 HTTP 请求。它简洁易用,能够处理复杂的请求场景,如保持会话、处理 cookies、上传文件等。本篇只对GET和POST做简单说明,其他请求类似。

安装

要在 Python 中使用 requests 库,首先需要安装它。可以使用以下指令进行安装:

pip install requests

如果遇到网络环境导致下载失败,可以使用国内第三方镜像站进行安装,这里使用的是阿里云镜像:

pip install requests -i https://mirrors.aliyun.com/pypi/simple

基本用法

测试网站

在接下来的代码示例中,会使用到 httpbin.org 工具。httpbin.org 是一个专门用于测试 HTTP 请求的服务网站。这个网站由 Kenneth Reitz 创建,目的是为开发者提供一个简单的工具来测试和调试各种 HTTP 请求。你可以使用它来发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等),并查看服务器返回的内容。

以下是 httpbin.org 提供的一些常见测试端点:

  • /get:用于测试 GET 请求。它会返回你发送的查询参数、请求头等信息。
  • /post:用于测试 POST 请求。你可以发送表单数据或 JSON 数据,并查看服务器返回的数据。
  • /status/:code:用于测试不同的 HTTP 状态码。例如,/status/404 会返回一个 404 状态码。
  • /redirect/:n:用于测试重定向。/redirect/3 会重定向 3 次。
  • /cookies 和 /cookies/set:用于测试 cookie 的处理。
  • /delay/:seconds:用于测试请求延迟。它会延迟指定的秒数后再响应。
  • /basic-auth/:user/:passwd:用于测试基本 HTTP 身份验证。

当你在开发过程中需要测试各种 HTTP 行为时。例如,你可以使用它来验证你的客户端是否正确处理重定向、身份验证、请求头、响应格式等。

发送GET请求

GET 请求用于从服务器获取数据。最简单的形式如下:

import requestsresponse = requests.get('http://httpbin.org/get')
print(response.status_code)  # 输出状态码,例如 200
print(response.text)  # 输出响应内容

在这里插入图片描述

发送POST请求

POST 请求通常用于提交数据到服务器,例如提交表单数据。

import requestspayload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post(url="http://httpbin.org/post",data=payload)
print(res.json())

更多请求

  1. requests.get(url, params=None, **kwargs): 发送一个HTTP GET请求,并返回一个Response对象。可以使用params参数传递查询参数,也可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  2. requests.post(url, data=None, json=None, **kwargs): 发送一个HTTP POST请求,并返回一个Response对象。可以使用data参数传递表单数据,也可以使用json参数传递JSON数据,还可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  3. requests.put(url, data=None, **kwargs): 发送一个HTTP PUT请求,并返回一个Response对象。可以使用data参数传递请求数据,也可以使用**kwargs参数传递其他的请求参数,如headers、timeout等。
  4. requests.delete(url, **kwargs): 发送一个HTTP DELETE请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  5. requests.head(url, **kwargs): 发送一个HTTP HEAD请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  6. requests.options(url, **kwargs): 发送一个HTTP OPTIONS请求,并返回一个Response对象。可以使用**kwargs参数传递请求参数,如headers、timeout等。
  7. requests.exceptions: requests库的异常类,如Timeout、ConnectionError等,可以用于捕获请求过程中可能出现的异常情况。

请求参数

可以通过 params 参数将查询参数添加到 URL 中,params 用于添加 URL 查询参数。这些参数会附加在 URL 后面,格式为 key=value,多个参数之间用 & 分隔。

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)

发送的实际请求 URL 会是:

https://api.example.com/data?key1=value1&key2=value2

请求头

自定义请求头可以通过 headers 参数传递。用于设置 HTTP 请求头。它用来传递额外的信息给服务器。可以把它想象成你写信时附上的说明,比如告诉收信人你是谁、信的内容类型等。

import requestsheaders = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://httpbin.org/get', headers=headers)
print(response.text)

其他常用请求属性

  • timeout :用于设置请求的超时时间,单位是秒。如果请求超过指定时间未完成,会抛出requests.exceptions.Timeout异常。

  • auth:用于处理 HTTP 身份验证。比如,当你访问某个网页时,可能会弹出一个窗口要求输入用户名和密码,这就是一种基本的 HTTP 身份验证。假设你要访问一个需要登录的 API 或网页,你需要提供正确的用户名和密码,服务器才会允许你访问。

    from requests.auth import HTTPBasicAuth
    response = requests.get(url, auth=HTTPBasicAuth('user', 'pass'))
    

    HTTPBasicAuth 是处理基本身份验证的简单方法,特别适合用来访问那些需要用户名和密码的简单 API 或网页。

  • cookies:用于发送 HTTP cookies,可以是一个字典。是服务器与客户端之间交换的小型数据,用于记住用户的信息和状态。

处理响应

请求会返回一个 Response 对象,该对象包含了服务器返回的数据和状态信息。

响应状态码

status_code属性用于获取 HTTP 响应状态码,如 200(成功)、404(未找到)、500(服务器错误)等:

if response.status_code == 200:print('Success!')
elif response.status_code == 404:print('Not Found.')

响应内容

requests 提供了多种方式获取响应内容:

  • text:返回响应内容的字符串形式。它自动将响应的字节数据解码为 Unicode 字符串,使用的是 HTTP 响应头中指定的字符编码(通常是 UTF-8)。
  • content:返回响应内容的二进制形式。不进行任何解码。这对于处理非文本内容(如图片、音频文件、视频文件、压缩包等)非常有用。适用于处理二进制文件,如图片、音频文件、PDF 文档等。
  • json():如果响应内容是 JSON 格式,可以使用此方法将其解析为 Python 字典。
  • url:返回请求的最终 URL(包括重定向后的 URL)
  • headers:返回一个包含响应头的字典。
  • cookies:返回服务器在响应中设置的 cookies。

处理超时

可以通过 timeout 参数设置请求的超时时间(单位为秒)。如果请求超时,会抛出 requests.exceptions.Timeout 异常。

try:response = requests.get('https://httpbin.org/delay/10', timeout=2)
except requests.exceptions.Timeout:print('The request timed out')

处理异常

当使用requests库发送HTTP请求时,有可能会发生异常情况,例如网络错误、连接超时等。为了处理这些异常情况,我们可以使用Python的异常处理机制。requests库中定义了多种异常类型,可以用来捕获和处理各种HTTP请求相关的异常情况。

在使用requests库时,我们应该始终使用try-except语句来捕获和处理可能发生的异常。以下是一些常见的异常类型:

  • requests.exceptions.RequestException: 所有异常的基类,可以用来捕获所有的异常情况。
  • requests.exceptions.Timeout: 当请求超时时,抛出此异常。
  • requests.exceptions.Timeout: 当请求超时时,抛出此异常。
  • requests.exceptions.HTTPError: 当HTTP请求返回错误状态码时,抛出此异常。

以下是一个例子,演示如何使用try-except语句来捕获请求可能出现的异常情况:

import requeststry:r = requests.get('https://www.baidu.com/', timeout=3)r.raise_for_status()
except requests.exceptions.Timeout as e:print('请求超时:', e)
except requests.exceptions.ConnectionError as e:print('连接错误:', e)
except requests.exceptions.HTTPError as e:print('HTTP错误:', e)
except requests.exceptions.RequestException as e:print('其他异常:', e)

在上述代码中,我们首先使用try语句来执行requests.get()方法,如果发生异常,则会跳转到相应的except块进行处理。如果请求超时、连接错误或者HTTP错误,将会抛出相应的异常,并且打印相应的错误信息。如果发生其他异常情况,则会抛出requests.exceptions.RequestException异常,并打印相应的错误信息。

通过使用异常处理机制,我们可以有效地处理请求中可能出现的各种异常情况,以确保我们的程序能够在不稳定的网络环境中稳定地运行。


相关文章:

【Python第三方库】Requests全面解析

文章目录 安装基本用法测试网站发送GET请求发送POST请求更多请求请求参数请求头其他常用请求属性处理响应响应状态码响应内容 处理超时处理异常 requests 是一个非常流行的 Python HTTP 库,用于发送所有类型的 HTTP 请求。它简洁易用,能够处理复杂的请求…...

基于CNN的医学X-Ray图像分类全程解析

数据集 我们所使用的数据集是胸部 X 光图像,它包含 2 个类别:肺炎和正常。该数据集由 Paulo Breviglieri 发布,是 Paul Mooney 最受欢迎数据集的修订版,此更新版本的数据集在验证集和测试集中的图像分布更加均衡。数据集分为 3 个文件夹(训练、测试、验证),包含肺炎和正…...

C++初学者指南-5.标准库(第二部分)--排序序列操作

C初学者指南-5.标准库(第二部分)–排序序列操作 文章目录 C初学者指南-5.标准库(第二部分)--排序序列操作二分查找binary_searchlower_boundupper_boundequal_rangeincludes 合并mergeinplace_merge 设置操作set_unionset_intersectionset_differenceset_symmetric_difference …...

matplotlib库学习之绘图透明度设置(精炼准确)

matplotlib库学习之透明颜色设置 一、简介 在数据可视化中,透明度设置可以使图表更具层次感,特别是在多层叠加图表时。matplotlib库提供了多种方法来设置图表各个部分的透明度,包括图形、文本、图例、坐标轴等部分。 二、为什么要设置成透明…...

select多路复用(tcp通信)

文章目录 项目名称项目结构 项目名称 io_demo1 项目结构 $ tree . ├── build ├── CMakeLists.txt ├── debug.gdb ├── include │ ├── mysocket.h │ ├── tcp_client.h │ └── tcp_server.h ├── sources │ └── server.cpp └── src├─…...

STM32IIC与SPI详解

单片机里的通信协议其实蛮多的,IIC;SPI;MQTT;CAN;包括串口也是一种通信协议。而串口通信虽然实现了全双工,但需要至少三根线,为了节省这一根线的成本,于是IIC诞生了。 目录 一.IIC…...

K8s第三节:k8s1.23.1升级为k8s1.30.0

上回书说到我们使用了kubeadm安装了k8s1.23.1,但是在k8s1.24之前还是使用docker作为容器运行时,所以这一节我打算将我安装的k8s集群升级为1.30.0版本; 1、修改containerd 配置 因为我们安装的docker自带containerd,所以我们不需要重新安装con…...

.gitignore不生效的解决方案

为什么会不生效 因为文件已经被git追踪(或者说被track 或者说被索引,都是一个意思)。 目前.gitignore面对已经被git追踪的文件是无法生效的。(这是现状,我们只能接收这个现状。不过个人觉得git官方可以对这方面进行优化调整,让其…...

脱胎于 S 语言的R语言,Ross Ihaka 和 Robert Gentleman 和社区的力量让 R 在学术界与研究机构放光彩

R语言从一门用于统计学教学的编程语言,发展成为全球数据科学领域的重要工具,离不开其强大的功能、丰富的社区资源和开源精神。这些都离不开Ross Ihaka 和 Robert Gentleman 和 社区的力量。 在1990年代初,新西兰奥克兰大学的统计学教授Ross I…...

JavaEE 第6节 内存可见性问题以及解决方法

目录 一、什么是内存可见性问题? 1、问题代码演示 2、基础知识铺垫 1)硬件层面 2)模型层面(JMM) 二、内存可见性问题的原因 三、volatile解决内存可见性问题 一、什么是内存可见性问题? 1、问题代码…...

es基本操作

以下是一些 Elasticsearch 常用的命令,涵盖了索引管理、数据操作和集群管理等方面: 基本操作 检查集群状态: curl -X GET "localhost:9200/_cluster/health?pretty"查看集群健康状态和基本信息。 查看所有索引: curl…...

开源 AI 智能名片 S2B2C 商城小程序赋能下的社区团购商业模式研究

摘要:本文深入探讨了社区团购商业模式的本质、特点及其优势,并详细分析了开源 AI 智能名片 S2B2C 商城小程序在社区团购中的应用与价值。通过对相关案例的研究和数据的分析,揭示了这一创新组合对社区商业生态的重要影响,为未来社区…...

AutoSar AP软件规范中CM介绍及功能概要

1. 前言 为了理解AutoSar AP中EM的概念,生搬硬套的翻译了《 AUTOSAR SWS CommunicationManagement.pdf》的介绍部分,并按照自己的理解进行了修改。如下 2. AUTOSAR_SWS_CommunicationManagement.pdf的介绍部分 本文件包含AUTOSAR AP通信管理的功能、A…...

【图形学】TA之路-向量

向量 向量 是一个有大小和方向的数学对象。在三维空间中,向量通常表示为 (v_x, v_y, v_z)。 基本操作 加法: a b (a_x b_x, a_y b_y, a_z b_z)减法: a - b (a_x - b_x, a_y - b_y, a_z - b_z)标量乘法: k * v (k * v_x, …...

[flink]部署模式

部署模式 在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。 Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(Session Mode)、单作业模式(Per-Job Mode&…...

为什么不用postman做自动化

面试的时候被问到:为什么不用postman做自动化 打开postman,看到用例集管理、API 管理、环境管理这三个功能,用户体验感算得上品牌等级了 为什么不用呢,文心一言给了一些答案 不适合大规模自动化测试:Postman 主要是为…...

一、Matlab基础

文章目录 一、Matlab界面二、Matlab窗口常用命令三、Matlab的数据类型3.1 数值类型3.2 字符和字符串3.3 逻辑类型3.4 函数句柄3.5 结构类型3.6 细胞数组 四、Matlab的运算符4.1 算术运算符4.2 关系运算符4.3 逻辑运算4.4 运算符优先级 五、Matlab的矩阵5.1 矩阵的建立5.2 矩阵的…...

执行java -jar命令,显示jar中没有主清单属性

在Java中,一个"主清单属性"(Main-Class attribute)是指定JAR文件中包含的应用程序入口点,即包含main方法的类的完全限定名。如果你尝试运行一个没有主清单属性的JAR文件,你可能会看到错误消息,如…...

【C++进阶】红黑树

目录 什么是红黑树?红黑树红黑树的性质 定义红黑树红黑树的操作insertinorderfindheightsize构造函数析构函数赋值拷贝判断红黑树 全部代码总结 什么是红黑树? 红黑树 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树&#xff…...

linux使用ssh连接一直弹出密码框问题

1.查看ssh服务的状态 输入以下命令: sudo service sshd status 小编已经安装了。 如果出现 Loaded: error (Reason: No such file or directory) 提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。 如果出现 Active: in…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

go 里面的指针

指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...

【JavaEE】万字详解HTTP协议

HTTP是什么?-----互联网的“快递小哥” 想象我们正在网上购物:打开淘宝APP,搜索“蓝牙耳机”,点击商品图片,然后下单付款。这一系列操作背后,其实有一个看不见的“快递小哥”在帮我们传递信息,…...