[和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 requests

response = requests.get('https://www.example.com')
print(response.text)
  1. 发送 POST 请求:
import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post-endpoint', data=data)
print(response.text)
  1. 处理 JSON 响应:
import requests

response = requests.get('https://api.example.com/data')
json_data = response.json()
  1. 设置请求头:
import requests

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

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com', params=params)
  1. 处理响应流(Streaming):
import requests

with 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 requests

with 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 requests

files = {'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 HTTPAdapter

url = '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}")

在这里插入图片描述

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

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

相关文章

系列五、线程间通信

一、synchronized实现 1.1、案例一(2个线程交替对变量执行1、-1操作,来10轮) 1.1.1、资源类ShareDataOne /*** Author : 一叶浮萍归大海* Date: 2023/11/20 10:44* Description: 资源类* 说明:2个线程使用if判断变量的值&#…

EfficientPhys

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

Midjourney绘画提示词Prompt参考学习教程

一、工具 SparkAi: SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软…

nvm:轻松管理多个 Node 版本 | 开源日报 No.80

nvm-sh/nvm Stars: 67.6k License: MIT Node Version Manager,是一个 POSIX 兼容的 bash 脚本,用于管理多个活动 node.js 版本。nvm 可以让你通过命令行快速安装和使用不同版本的 Node。它可以在任何符合 POSIX 标准的 shell(sh、dash、ksh…

YOLOv8-seg改进:SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能

🚀🚀🚀本文改进:SEAM、MultiSEAM分割物体与物体相互遮挡性能 🚀🚀🚀SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何…

JSP协同办公eclipse定制开发mysql数据库BS模式java编程OA系统

一、源码特点 java 协同办公管理系统是一套完善的web设计系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使…

internet download manager2024中文绿色版(IDM下载器)

在现代互联网时代,文件下载已经成为我们日常生活中必不可少的一项技能。无论是下载软件、音乐、视频还是其他文件,一个高效的下载方法能够为我们节省时间和精力。本文将为您提供一份简明扼要的下载教程,让您轻松掌握文件下载的技巧。 intern…

【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间

文章目录 前言一、汇编语言中数据位置的表达1.1 汇编中有哪几种数1.立即数(idata):2.寄存器(Register):3.内存(Memory):4.段地址(Segment Address&#xff0c…

NextJS开发:ssr服务器端渲染页面,添加加载进度提示

nextjs中ssr服务器端渲染的页面加载速度慢的时候,需要显示一个如下图的加载进度提示,来优化用户体验。 nextjs框架中已经预留了加载动画的接口页面,我们只需要提那家加载动画tsx,处理页面逻辑就可以实现。 page.tsx 同级目录创建…

ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题

今天给大家安利一套现代 CSS 的教程,以前写网页的问题,现在都可以用新的写法来解决了。 ModernCSS.dev 是一个现代 CSS 语法的教程,讲解新的 CSS 语法如何解决一些传统问题,一共有30多课。 这套教程的作者是 Stephanie Eckles&am…

2023年中国中端连锁酒店分类、市场规模及主要企业市占率[图]

中端连锁酒店行业是指定位于中档酒店市场、具有全国统一的品牌形象识别系统、全国统一的运营体系、会员体系和营销体系的酒店。中端酒店通常提供舒适、标准化的房间设施和服务,价格较为合理,符合广大消费者的需求。其价格略高于经济型酒店,但…

【canvas】了解canvas,并实现会议预定记录钟表盘、页面水印

初识canvas Canvas 有什么用 Canvas 允许使用直线、曲线、矩形、圆形等基本图形绘制出复杂的图形 Canvas 可以加载图像,并进行各种处理,如裁剪、缩放、旋转等操作 Canvas 可以通过 JavaScript 控制,所以你可以利用帧动画原理,…

Latex学习

二 实例 1. \Delta_{w}\frac{\partial l}{\partial w_{i1}}weight:\frac{\partial l}{\partial x_{i1}} 效果如下 其中对于希腊字母的大小写来说,可以参考: 【LaTeX 语法】字母表示 ( 大写、小写、异体 希腊字母 | 粗体字母 | 花体字母 )_latex字母_韩…

大白话解释什么类加载机制

大家好,我是伍六七。 今天我们来聊聊一个 Java 面试必考基础题目:类加载机制和双亲委派机制。 Java 类的加载机制是 Java 虚拟机(JVM)中类加载(Class Loading)和链接(Linking)的过…

RT-DETR优化改进:SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能

🚀🚀🚀本文改进:SEAM、MultiSEAM分割物体与物体相互遮挡性能 🚀🚀🚀SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能 🚀🚀🚀RT-DETR改进创新专栏:http://t.csdnimg.cn/vuQTz 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; RT-DETR模型创新…

【cpolar】搭建我的世界Java版服务器,公网远程联机

🎥 个人主页:深鱼~🔥收录专栏:cpolar🌄欢迎 👍点赞✍评论⭐收藏 目录 前言: 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安…

数字IC前端学习笔记:时钟切换电路

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 有些时候我们需要在系统运行时切换系统时钟,最简单的方法就是使用一个MUX(数据选择器)选择输出的时钟,如下代码片所…

【C++】​——多态性与模板(其一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

MySQL数据库入门到大牛_基础_09_子查询(子查询分类方法;单行子查询,多行子查询;相关子查询)

前面的第三章到第八章中,我们讲的是查询,查询的基本结构已经进行了介绍,聚合函数学习完后已经介绍了查询语句的完整的执行流程。 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。本章也是查询…