[和ChatGPT学编程]Python Requests 简介

requests 是一个流行的 Python 库,用于发送 HTTP 请求。它提供了简洁而友好的 API,使得发送 HTTP 请求变得简单而直观。requests 具有许多强大的功能,适用于各种 HTTP 请求场景,包括 GET、POST、PUT、DELETE 等。

目录

    • requests 库的主要特点和使用示例
    • requests 相关配置项
    • 什么时候设置 stream=True
    • 如何设置连接池
    • HTTPAdapter详解
    • max_retries=3时多久会报超时

requests 库的主要特点和使用示例

  1. 安装:
    你可以使用 pip 安装 requests:
pip install requests
  1. 发送 GET 请求:
import requestsresponse = requests.get('https://www.example.com')
print(response.text)
  1. 发送 POST 请求:
import requestsdata = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post-endpoint', data=data)
print(response.text)
  1. 处理 JSON 响应:
import requestsresponse = requests.get('https://api.example.com/data')
json_data = response.json()
  1. 设置请求头:
import requestsheaders = {'User-Agent': 'MyApp/1.0'}
response = requests.get('https://www.example.com', headers=headers)
  1. 处理响应状态码和异常:
import requests
try:response = requests.get('https://www.example.com')response.raise_for_status()  # 抛出 HTTPError 异常,如果响应状态码不是 2xx
except requests.exceptions.HTTPError as err:print(f"HTTP Error: {err}")
  1. 传递 URL 查询参数:
import requestsparams = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params)
  1. 处理响应流(Streaming):
import requestswith requests.get('https://www.example.com/large_file.zip', stream=True) as response:with open('large_file.zip', 'wb') as file:for chunk in response.iter_content(chunk_size=128):file.write(chunk)
  1. 使用 Session:
import requestswith requests.Session() as session:session.get('https://www.example.com/login', params={'user': 'username', 'password': 'password'})response = session.get('https://www.example.com/dashboard')
  1. 文件上传:
import requestsfiles = {'file': ('filename.txt', open('filename.txt', 'rb'))}
response = requests.post('https://www.example.com/upload', files=files)

requests 是一个功能强大且易于使用的库,适用于各种网络请求场景。通过上述示例,你可以看到它提供了简单而灵活的 API,用于处理 HTTP 请求和响应。

requests 相关配置项

  1. params:

用于向 URL 中传递查询参数的字典或字节序列。例如:params={‘key1’: ‘value1’, ‘key2’: ‘value2’}。

  1. headers:

用于设置请求头的字典,包含了一些额外的信息,如用户代理、认证信息等。例如:headers={‘User-Agent’: ‘Mozilla/5.0’}。

  1. data:

发送 POST 请求时,用于发送表单数据或 JSON 数据的字典、字节序列或文件。例如:data={‘key1’: ‘value1’, ‘key2’: ‘value2’}。
json:

发送 POST 请求时,用于发送 JSON 数据的字典。requests 会自动将其转为 JSON 格式。例如:json={‘key1’: ‘value1’, ‘key2’: ‘value2’}。

  1. auth:

用于设置 HTTP 基本认证的元组,包含用户名和密码。例如:auth=(‘username’, ‘password’)。

  1. cookies:

用于发送请求时携带的 cookies 的字典。例如:cookies={‘cookie1’: ‘value1’, ‘cookie2’: ‘value2’}。

  1. timeout:

用于设置请求超时时间,以秒为单位。如果在指定时间内没有得到响应,将引发 requests.Timeout 异常。例如:timeout=5。

  1. allow_redirects:

用于设置是否允许重定向,默认为 True。如果设置为 False,则禁止重定向。例如:allow_redirects=False。

  1. proxies:

用于设置代理服务器的字典。例如:proxies={‘http’: ‘http://proxy.example.com’, ‘https’: ‘https://proxy.example.com’}。

  1. verify:

用于设置是否验证 SSL 证书,默认为 True。如果设置为 False,将忽略 SSL 证书验证。例如:verify=True。

  1. stream:

用于控制是否立即下载响应体,默认为 False。如果设置为 True,则可以逐块地处理响应体。例如:stream=True。

  1. files:

用于上传文件的字典,包含文件名和文件内容。例如:files={‘file’: (‘filename.txt’, open(‘filename.txt’, ‘rb’))}。

  1. hooks:

用于设置回调钩子函数的字典,用于处理请求和响应。例如:hooks={‘response’: callback_function}。

什么时候设置 stream=True

在使用 Python 中的 requests 库时,设置 stream=True 通常适用于以下情况:

下载大文件或数据流:

  • 当你需要下载大型文件或处理数据流时,使用 stream=True 可以避免将整个响应体一次性加载到内存中,而是逐块地处理响应体。
    长时间运行的请求:

  • 对于可能需要很长时间才能完成的请求,使用 stream=True 可以逐步获取响应,而不需要等待整个响应完全下载才能开始处理数据。
    逐块处理响应体:

  • 如果你希望逐块处理响应体,而不是等整个响应体下载完成,可以使用 stream=True 并通过 iter_content() 或 iter_lines() 方法逐块地获取响应体。

  • 避免大内存占用:

  • 当响应体非常大时,将其一次性加载到内存中可能导致内存占用过大,甚至引发 MemoryError。使用 stream=True 可以有效地减小内存占用,提高程序的稳定性。

如何设置连接池

在 Python 的 requests 库中,可以通过定制 HTTPAdapter 来设置连接池的相关参数,以控制 HTTP 连接的行为。

创建连接池:

import requests
from requests.adapters import HTTPAdapter# 创建一个自定义的 HTTPAdapter
custom_adapter = HTTPAdapter(pool_connections=5,   # 设置连接池的大小,即最大同时保持的连接数pool_maxsize=10,       # 设置每个主机的最大连接数,即每个目标主机允许保持的最大连接数pool_block=True,       # 如果连接池达到最大容量,并且没有可用连接,设置为 True 时,请求将会阻塞直到有可用的连接pool_timeout=30        # 设置获取连接的超时时间,单位为秒
)# 创建一个 Session,并将自定义的 HTTPAdapter 添加到 Session
session = requests.Session()
session.mount('http://', custom_adapter)
session.mount('https://', custom_adapter)# 使用带有自定义适配器的 Session 发送请求
response = session.get('https://www.example.com')
print(response.text)

HTTPAdapter详解

在 Python 的 requests 库中,HTTPAdapter 是一个适配器类,用于为 requests.Session 提供更灵活的 HTTP 连接池和持久性连接的配置。HTTPAdapter 允许你自定义 HTTP 连接的行为,例如设置连接池的大小、设置连接的生存时间等。

以下是对 HTTPAdapter 的详细介绍:

创建和使用 HTTPAdapter:

import requests
from requests.adapters import HTTPAdapterurl = 'https://www.example.com'# 创建一个 Session
session = requests.Session()# 创建一个自定义的 HTTPAdapter
adapter = HTTPAdapter(max_retries=3, pool_connections=10, pool_maxsize=10, pool_block=True)# 将自定义的 HTTPAdapter 添加到 Session
session.mount('http://', adapter)
session.mount('https://', adapter)# 使用带有自定义适配器的 Session 发送请求
response = session.get(url)
print(response.text)

HTTPAdapter 的主要参数和方法:

  • max_retries:
    设置重试次数,当请求失败时自动重试。默认为 0,即不进行重试。
  • pool_connections:
    设置连接池的大小,即最大同时保持的连接数。
  • pool_maxsize:
    设置每个主机的最大连接数,即每个目标主机允许保持的最大连接数。
  • pool_block:
    如果连接池达到最大容量,并且没有可用连接,设置为 True 时,请求将会阻塞直到有可用的连接。设置为 False 时,会引发 ConnectionError。默认为 True。
  • pool_block:
    如果连接池达到最大容量,并且没有可用连接,设置为 True 时,请求将会阻塞直到有可用的连接。设置为 False 时,会引发 ConnectionError。默认为 True。
  • pool_timeout:
    设置获取连接的超时时间,单位为秒。
  • close():
    关闭适配器,并关闭其所有的连接。

使用 HTTPAdapter 的好处:

  • 连接池控制:
    通过 HTTPAdapter 可以自定义连接池的大小和连接数,以便更好地控制和优化 HTTP 连接的使用。
  • 重试机制:
    可以通过设置 max_retries 参数启用重试机制,确保在发生连接错误时进行自动重试。
  • 持久性连接:
    可以通过适配器来实现持久性连接,提高多次请求同一主机时的性能。
  • 定制化配置:
    可以通过适配器提供的参数来定制化配置,以满足特定的请求需求。
    使用 HTTPAdapter 可以使得请求更加灵活和可定制,特别是在处理大量请求、需要精细控制连接的情况下,可以通过适配器来优化连接的管理。

max_retries=3时多久会报超时

在 requests 中,max_retries 参数用于设置在请求失败时的最大重试次数。重试时会等待一段时间再次尝试请求,这个等待时间由 Retry 实例的 backoff_factor 和 total 参数控制。

默认情况下,backoff_factor 是 0,即每次重试之间的等待时间是固定的。如果设置了 backoff_factor,则等待时间会指数增加,以实现一种指数退避的效果。

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry# 创建一个自定义的 Retry 实例,设置最大重试次数为 3,backoff_factor 为 1
retry = Retry(total=3, backoff_factor=1)# 创建一个自定义的 HTTPAdapter,使用自定义的 Retry 实例
custom_adapter = HTTPAdapter(max_retries=retry)# 创建一个 Session,并将自定义的 HTTPAdapter 添加到 Session
session = requests.Session()
session.mount('http://', custom_adapter)
session.mount('https://', custom_adapter)url = 'https://www.example.com'# 使用带有自定义适配器的 Session 发送请求
try:response = session.get(url, timeout=5)  # 设置超时时间为 5 秒response.raise_for_status()print(response.text)
except requests.exceptions.RequestException as e:print(f"请求失败: {e}")

在这里插入图片描述

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

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

相关文章

【Django-DRF用法】多年积累md笔记,第3篇:Django-DRF的序列化和反序列化详解

本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django REST framework能帮助我们简化开发REST API的工作。 全…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点(Node)2. 服务(Service)3. 栈(Stack) 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测 目录 分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测(完整源码和数据) 2.多…

Kubernetes学习-概念2

参考:关于 cgroup v2 | Kubernetes 关于 cgroup v2 在 Linux 上,控制组约束分配给进程的资源。 kubelet 和底层容器运行时都需要对接 cgroup 来强制执行为 Pod 和容器管理资源, 这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中…

BatchNormalization:解决神经网络中的内部协变量偏移问题

ICML2015 截至目前51172引 论文链接 代码连接(planing) 文章提出的问题 减少神经网络隐藏层中的”内部协变量偏移”问题。 在机器学习领域存在“协变量偏移”问题,问题的前提是我们划分数据集的时候,训练集和测试集往往假设是独立同分布(i.i.d)的,这种独立同分布更有利于…

结合scss实现黑白主题切换

是看了袁老师的视频后,自己做了一下练习。原视频地址: b站地址https://www.bilibili.com/video/BV15z4y1N7jB/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_sourcec6cf63302f28d94ebc02cbedcecc57ea首先创建一个全局的scs…

055-第三代软件开发-控制台输出彩虹日志

第三代软件开发-控制台输出彩虹日志 文章目录 第三代软件开发-控制台输出彩虹日志项目介绍控制台输出彩虹日志实现原理真实代码 总结 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QM…

GSVA,GSEA,KEGG,GO学习

目录 GSVA 1:获取注释基因集 2:运行 GSEA 1,示例数据集 2,运行 GSEA_KEGG富集分析 GSEA_GO富集分析 DO数据库GSEA MSigDB数据库选取GSEA KEGG 1:运行 2:绘图 bar图 气泡图 绘图美化 GO GSVA 1:获取注…

TikTok与媒体素养:如何辨别虚假信息?

在当今数字时代,社交媒体平台如TikTok已经成为信息传播和社交互动的主要渠道之一。然而,随之而来的是虚假信息的泛滥,这对用户的媒体素养提出了严峻的挑战。本文将探讨TikTok平台上虚假信息的现象,以及如何提高媒体素养&#xff0…

EfficientPhys

研究背景 基于相机的生理测量是一种非接触式方法,用于通过从身体反射的光捕获心脏信号。最常见的此类信号是通过光电体积描记图 (PPG) 测量的血容量脉搏 (BVP)。由此,可以推导出心率、呼吸率和脉搏传导时间。神经网络模型是当前最先进的 rPPG 测量方式。…

Zeet构建多云战略充分发挥云的优势

大型企业通常拥有基础设施和应用团队,有能力围绕自己的业务需求构建所需平台。但对于技术团队精简、预算紧张的小企业来说,定制平台往往不现实而且难以扩展,是负担不起的“奢侈品”。 这一情况催生了平台即服务(PaaS)…

高效案例检索工具,Alpha案例库智慧检索成为律师检索工具首选

“工欲善其事,必先利其器。”当今,律界同仁需要权衡的问题早已不是“要不要”使用法律科技,而是如何高质量、高效率地使用法律科技工具。在业内人士看来,随着人工智能技术的不断发展,法律行业科技化将成为不可逆转的趋…

PyCharm中常用插件推荐

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

大厂秋招真题【单调栈】Bilibili2021秋招-大鱼吃小鱼

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 小明最近喜欢上了俄罗斯套娃、大鱼吃小鱼这些大的包住小的类型的游戏。 于…

c语言:矩阵交换

题目&#xff1a; 代码和思路&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {int n 0;int m 0;int arr[10][10] { 0 }; // 输入行和列scanf("%d%d", &n, &m);int i 0;int j 0;//读取数组for (i 0; i < n; i)…

ASUS华硕ROG幻13笔记本电脑GV301QE原厂Windows10系统

链接&#xff1a;https://pan.baidu.com/s/1aPW0ctRXRNAhE75mzVPdTg?pwdds78 提取码&#xff1a;ds78 华硕玩家国度幻13笔记本电脑锐龙版Ryzen 7 5800HS,显卡3050 3050Ti,3060,3060Ti,3070,3070Ti 原厂W10系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办…

MATLAB中plotmatrix函数用法

目录 语法 说明 示例 使用两个矩阵输入创建散点图矩阵 使用一个矩阵输入创建散点图矩阵 指定标记类型和颜色 创建并修改散点图矩阵 plotmatrix函数的功能是创建散点图矩阵。 语法 plotmatrix(X,Y) plotmatrix(X) plotmatrix(___,LineSpec) plotmatrix(ax,___) [S,AX,B…

让别人访问电脑本地

查看本地IP地址&#xff1a; 使用ipconfig&#xff08;Windows&#xff09;或ifconfig&#xff08;Linux/macOS&#xff09;命令来查看你的计算机本地网络的IP地址。确保*****是你的本地IP地址。 防火墙设置&#xff1a; 确保你的防火墙允许从外部访问*****。你可能需要在防火…

服务注册发现 springcloud netflix eureka

文章目录 前言角色&#xff08;三个&#xff09; 工程说明基础运行环境工程目录说明启动顺序&#xff08;建议&#xff09;&#xff1a;运行效果注册与发现中心服务消费者&#xff1a; 代码说明服务注册中心&#xff08;Register Service&#xff09;服务提供者&#xff08;Pro…

Since Maven 3.8.1 http repositories are blocked

原因 高版本的maven不支持http的存储库。 解决方案 其实方法有好几种&#xff0c;比如降级maven版本至3.6.3(之前一直用的都是这个版本)&#xff0c;我选择了一种比较快(但不一定安全)的方式&#xff0c;因为3.6.3版本被我卸载了&#xff0c;这里直接修改idea的setting配置&…