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

news2024/11/13 20:45:15

在这里插入图片描述

文章目录

  • 安装
  • 基本用法
    • 测试网站
    • 发送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 requests

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

在这里插入图片描述

发送POST请求

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

import requests

payload = {'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 requests

headers = {'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 requests

try:
    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异常,并打印相应的错误信息。

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


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

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

相关文章

DAMA学习笔记(十三)-大数据和数据科学

1.引言 大数据不仅指数据的量大,也指数据的种类多(结构化的和非结构化的,文档、文件、音频、视频、流数据等),以及数据产生的速度快。数据科学家是指从从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法…

数据结构与算法基础篇--有向无环

. - 力扣(LeetCode) 力扣-207题 要判定一个图是否为有向无环图(DAG, Directed Acyclic Graph),可以使用拓扑排序(Topological Sort)的方法。如果一个有向图存在拓扑排序,那么它就是…

【MySQL】事务——事务的引入、事务的概念、什么是事务、为什么会出现事务、事务的版本支持、事务的提交方式、事务常见操作方式

文章目录 MySQL1. 事务的引入2. 事务的概念2.1 什么是事务2.2 为什么会出现事务2.3 事务的版本支持2.4 事务的提交方式2.5 事务常见操作方式2.5.1 测试事务开始和回滚2.5.2 测试未commit事务回滚2.5.3 测试commit事务持久化2.5.4 测试begin事务不受自动提交影响2.5.5 测试单条S…

【C++】模板(相关知识点讲解 + STL底层涉及的模板应用)

目录 模板是什么? 模板格式 模板本质 函数模板 格式介绍 显式实例化 模板参数匹配原则 类模板 类模板的实例化 非类型模板参数 模板特化——概念 函数模板特化 类模板的特化 全特化 半特化 偏特化 三种类特化例子(放一起比较)…

在 CentOS 7 上安装 Redmine 的详细步骤及 20 个经典用法

目录 1. 引言 2. 安装步骤 2.1 更新系统 2.2 安装依赖包 2.3 安装 MariaDB 数据库 2.4 配置 MariaDB 2.5 安装 Ruby 2.6 安装 Redmine 2.7 配置 Redmine 2.8 安装 Bundler 和必要的 Gems 2.9 生成密钥并迁移数据库 2.10 配置 Apache 2.11 启动 Apache 并设置开机自…

1712系列 嵌入式电源系统

1712系列 嵌入式电源系统 2/3/4/5G&共享站点快速部署 简述 1712A 300A嵌入式电源系统采用模块化设计、组合式结构,由控制器、整流模块、交流配电单元、直流配电单元等组成。该系统将交流电转换成稳定的-48V直流电,用于铁塔、移动、电信、联通等公司…

修改nacos实力权重或者对某实例下线报错

在Nacos控制台进行上述操作,错误信息 caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused:…

sql注入大总结【万字详解】

文章目录 数据库的架构sql注入概念正常语句正常回显页面在页面中使用sql语句 跨库查询sql文件读写影响条件复现读写的路径的问题 sql注入请求分类sql注入请求类型sql注入请求方式:sql注入数据请求格式 数据库的增删改查数据库查询数据库添加数据库删除数据库修改 盲…

【python函数】读文件(返回str数据)

大家好,我是一名_全栈_测试开发工程师,已经开源一套【自动化测试框架】和【测试管理平台】,欢迎大家关注我,和我一起【分享测试知识,交流测试技术,趣聊行业热点】。 一、函数说明: 使用的函数&a…

STM32IIC与SPI详解

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

【产业前沿】树莓集团如何以数字媒体产业园为引擎,加速产业升级?

在数字化转型的浪潮中,树莓集团以敏锐的洞察力和前瞻性的战略眼光,将数字媒体产业园打造成为产业升级的强劲引擎。这一创新举措不仅为传统行业插上了数字的翅膀,更为整个产业链注入了新的活力与可能。 树莓集团深知,数字媒体产业园…

【人工智能】AI最终会取代程序员吗?

1. 前言 到 2030 年,40% 的编程任务将实现自动化。这个令人难以置信的统计数据凸显了人工智能在软件工程中日益增长的影响力,并引发了一个问题:人工智能会彻底接管软件工程吗? 人工智能技术正在蓬勃发展,有望实现大量…

【实战】Spring Security Oauth2自定义授权模式接入手机验证

文章目录 前言技术积累Oauth2简介Oauth2的四种模式授权码模式简化模式密码模式客户端模式自定义模式 实战演示1、mavan依赖引入2、自定义手机用户3、自定义手机用户信息获取服务4、自定义认证令牌5、自定义授权模式6、自定义实际认证提供者7、认证服务配置8、Oauth2配置9、资源…

C语言程序设计-[11] 循环结构嵌套

1、循环结构嵌套形式 上面三种循环语句结构可以相互嵌套,组合非常灵活。循环嵌套需要记住最重要的一点:”外循环执行一次,内循环要完整执行一遍”,要通过实例加深对这一句话的理解。 注1:一个循环结构由四个要素构成&…

Java设计模式-建造者模式-一次性理解透

1. 建造者模式简介 今天我们将研究 Java 中的建造者模式(Builder 模式)。Builder 设计模式是一种创建型设计模式,也被称为生成器模式,类似于工厂模式和抽象工厂模式。 该模式用于创建复杂对象,允许用户创建不同类型的…

【Python】PyWebIO 初体验:用 Python 写网页

目录 前言1 使用方法1.1 安装 Pywebio1.2 输出内容1.3 输入内容 2 示例程序2.1 BMI 计算器2.2 Markdown 编辑器2.3 聊天室2.4 五子棋 前言 前两天正在逛 Github,偶然看到一个很有意思的项目:PyWebIo。 这是一个 Python 第三方库,可以只用 P…

100 Exercises To Learn Rust 挑战!准备篇

公司内部的学习会非常活跃!我也参与了Rust学习会,并且一直在研究rustlings。最近,我发现了一个类似于rustlings的新教程网站:Welcome - 100 Exercises To Learn Rust。 rustlings是基于Rust的权威官方文档《The Rust Programming…

汽车免拆诊断案例 | 2010款劳斯莱斯古斯特车中央信息显示屏提示传动系统故障

故障现象  一辆2010款劳斯莱斯古斯特车,搭载N74发动机,累计行驶里程约为11万km。车主反映,起动发动机后组合仪表和中央信息显示屏均提示传动系统故障。用故障检测仪检测,发现发动机控制模块2(DME2)中存储…

SmartBI拓展包二开入门开发

前言 新接到一个项目拓展包三开的需求,没有相关经验,学习开发,本文尝试通过简单的定位以及指导,确定修改点 SmartBI帮助文档-拓展包开发 登录 http://localhost:18080/smartbi/vision/index.jsp后台配置 上传拓展包&#xff0…

MySQL和Redis的数据一致性

MySQL和Redis的数据一致性 多线程环境下的涉及读写的缓存才会存在MySQL和Redis的数据不一致问题 先删除缓存再更新数据库再延时删除缓存 线程一删除缓存线程一更新数据线程二开始查数据如果第二步线程一更新数据延时,那么线程二会重新从数据库加载数据&#xff0…