[和ChatGPT学编程]Python Requests 简介

news2024/9/22 1:40:04

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}")

在这里插入图片描述

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

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

相关文章

Tomcat 启动 HTTP状态 404 - 未找到

Tomcat 启动 HTTP状态 404 - 未找到 tomcat启动的项目访问地址实际是根据应用程序上下文的目录来决定的,而不是服务器那边配置的URL的地址来决定的

nginx学习(3)Nginx 负载均衡

Nginx 负载均衡 实战案例 实现效果 浏览器地址栏输入地址 http://172.31.0.99/oa/a.html,负载均衡效果,平均在 8083 和 8084 端口中,刷新浏览器,显示不同 一、配置 1、先创建2个文件夹tomcat8083和tomcat8084,并将…

JSP 四大域对象

我们来说说JSP的四大域对象 首先 我们要了解他们是四种保存范围 第一种 是 Page范围 只作用于当前界面 只要页面跳转了 其他页面就拿不到了 第二种 request范围 在一次请求中有效 就是 我们服务端指向某个界面 并传递数据给他 那么 如果你是客户端跳转就不生效了 第三种 sessi…

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

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

2021年3月青少年软件编程(Python)等级考试试卷(一级)

2021年3月青少年软件编程(Python)等级考试试卷(一级) 分数:100.00 题数:37一、单选题(共25题,每题2分,共50分)二、判断题(共10题,每题…

vue2通信方法(最全)

前言 数据传递是框架的核心要素之一,也是在业务开发中极其重要的技术.熟练掌握所有的通信方法,是开发者必须具备的技能。 这篇文章我将会把vue2所有的通信的方法都形成简单易懂的demo。 在我的分类中,通信方法有两种大类型: 1.vue框架提供的通信方法 2.插件及其他通信方法…

指针学习(五)

一.函数指针数组 定义:函数指针放进数组中,就叫函数指针数组,准确的说,将一个函数的地址存到⼀个数组中 那这个数组就叫函数指针数组。 int (*pi[5])(int); 解读:pi先和[]结合,因此是数组,加i…

Leetcode—5.最长回文子串【中等】

2023每日刷题(三十五) Leetcode—5.最长回文子串 中心扩展法算法思想 可以使用一种叫作“中心扩展法”的算法。由回文的性质可以知道,回文一定有一个中心点,从中心点向左和向右所形成的字符序列是一样的,并且如果字符…

Threejs_04 gui调试开发

threejs的快捷调试工具就是这玩意,那么如何使用呢?? 使用gui调试开发 引入gui实例 //导入lil.gui // import * as dat from "dat.gui"; // 旧 import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";…

Vatee万腾科技创新之舟:Vatee数字化力量引领未来的独特路径

在数字化的大潮中,Vatee万腾如一艘科技创新之舟,在未来的海洋中翱翔。vatee万腾以强大的数字化力量为桨,引领着行业向着新的、独特的路径前行,塑造着数字时代的未来。 Vatee万腾不仅仅是一家科技公司,更是一艘创新之舟…

数据结构与算法编程题2

逆置线性表&#xff0c;使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …

外贸人如何向国外客户展现我们的合作诚意

最近听直播&#xff0c; 一个小伙伴说自己在国外找了一个合作伙伴&#xff0c; 让他代表自己的公司和当地的客户沟通&#xff0c;然后给对方结算佣金&#xff0c;虽然对方口头答应好好的&#xff0c;但是好像做事情并不用心的样子。 比如自己之前去他们当地设展的时候邀请对方…

MAX/MSP SDK学习01:Object的基本构成、创建销毁行为函数的定义、属性的赋值、以及相关注意事项

Object的基本构成、创建&销毁&行为函数的定义、属性的赋值、以及相关注意事项。 #include "ext.h" // standard Max include, always required #include "ext_obex.h" // required for new style Max object// object struct&#xff0c;定义属…

ruoyi-vue前后端分离版本验证码实现思路

序 时隔三个月&#xff0c;再次拿起我的键盘。 前言 ruoyi-vue是若依前后端分离版本的快速开发框架&#xff0c;适合用于项目开始搭建后台管理系统。本篇文章主要介绍其验证码实现的思路。 一、实现思路简介 1、后端会生成一个表达式&#xff0c;比如1 2 ? 3&#xff0…

Django 入门学习总结2

通过学习&#xff0c;我们可以实现一个简单的投票系统。这个投票系统有两部分组成。 公共部分&#xff0c;公众可以查看和进行投票。管理员可以进行增加、删除、修改投票信息。 这里投票系统Python语言版本为3.10.13&#xff0c;Django Web框架版本为4.2.7。 投票系统的实现…

湖科大计网:传输层

一、传输层概述 一、基本概念 传输层是端到端的协议。 因特网的两种不同的传输层协议&#xff1a; TCP&#xff1a;面向连接 UDP&#xff1a;无连接 我们在学习的过程中&#xff0c;只需要关注传输层之间的通信&#xff0c;不需要关注传输层协议数据是经过路由器转发至目的网络…

利用python下的matplotlib库绘制能突出显示的饼状图

需求描述 根据已有的数据绘制一个占比图&#xff0c;期望能对其中的部分占比成分进行突出显示。 原始数据如下&#xff1a; 国外投资&#xff08;5%&#xff09;、公司投资&#xff08;8%&#xff09;、地方投资&#xff08;7%&#xff09;、中央财政&#xff08;80%&#xff…

小红书软文种草怎么做,新产品上市软文创作技巧!

很多品牌有新品上市时都会借助软文传播来打开销路。因此&#xff0c;软文的质量几乎决定了新产品的营销结果。今天为大家分享下小红书软文种草怎么做&#xff0c;新产品上市软文创作技巧&#xff01; 一、新品上市软文撰写的三大重点 1、确定软文撰写角度 新品上市软文&#xf…

使用契约的链上限价订单

我们开发了链上限价订单。 它基于一种称为契约的智能合约&#xff0c;只有在花费输出的交易满足特定条件时才可以花费输出。 为了演示其工作原理&#xff0c;我们实施了以比特币支付的 Ordinals 代币买卖限价订单&#xff0c;无需托管人。 它可以运行在任何比特币协议链上&…

七,vi和vim

Linux系统会内置vi文本编辑器 Vim具有程序编辑的能力&#xff0c;可以看做是Vi的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 vi和vim常用的三…