Python中的HTTP客户端库:httpx与request | python小知识
Python中的HTTP客户端库:httpx与request | python小知识
在Python中,发送HTTP请求和处理响应是网络编程的基础。requests
和httpx
是两个常用的HTTP库,它们都提供了简洁易用的API来发送HTTP请求。然而,httpx
作为新一代的HTTP客户端库,在功能和性能上都有所提升。本文将详细介绍httpx
和requests
的区别,并通过对比展示httpx
的优势。
1. requests库简介
requests
是一个非常流行的Python HTTP库,它基于urllib3
库实现,提供了许多方便的功能,并且非常易于使用。requests
库支持HTTP连接保持和连接池,能够自动处理cookies、文件上传、自动确定响应内容的编码以及国际化的URL和POST数据自动编码。requests
库自称为“HTTP for Humans”,即让HTTP服务于人类,说明其设计目标是简洁和方便。
安装requests库
pip install requests
使用requests库发送HTTP请求
import requests# 发送GET请求
response = requests.get('https://www.example.com')
print(response.status_code) # 输出响应状态码
print(response.text) # 输出响应文本# 发送POST请求
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://www.example.com', json=data, headers=headers)
print(response.status_code) # 输出响应状态码
print(response.text) # 输出响应文本
2. httpx库简介与对比
httpx
是一个新一代的Python HTTP客户端库,它支持同步和异步两种方式发送HTTP请求,并且提供了许多现代化的特性。与requests
相比,httpx
在以下几个方面有所提升:
2.1 异步支持
requests
库只能使用同步方式发送HTTP请求,而httpx
则既可以使用同步方式,也可以使用异步方式。这意味着httpx
可以在处理需要等待的操作时不会阻塞程序,从而提高效率。
示例:使用httpx发送异步HTTP请求
import httpx
import asyncio# 定义异步函数
async def fetch(url):async with httpx.AsyncClient() as client:response = await client.get(url)return response.json()# 定义并发任务
async def main():urls = ['https://api.github.com', 'https://httpbin.org/get']tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(result)# 执行异步任务
asyncio.run(main())
2.2 HTTP/2支持
requests
库只支持HTTP/1.1协议,而httpx
则支持HTTP/2协议。HTTP/2提供了许多性能改进,比如多路复用和服务端推送,这些都可以提高HTTP通信的效率。
2.3 性能提升
httpx
使用httptools
库来解析和处理HTTP报文,而requests
则使用urllib3
库。httptools
库在解析和处理HTTP报文方面有更好的性能,因此httpx
可能会比requests
更快。
2.4 兼容性
httpx
的API设计与requests
类似,因此从requests
迁移到httpx
的成本几乎是零。你可以很容易地将现有的requests
代码替换为httpx
代码,而无需做太多修改。
2.5 丰富的功能
httpx
还支持多种认证方式(如Basic、Digest、JWT、OAuth等)、中间件挂载、设置请求的超时时间、自动处理重定向以及设置代理服务器等功能。这些功能使得httpx
在处理复杂的HTTP请求时更加灵活和强大。
2.6 更多例子
当然可以,以下是使用httpx
库进行POST请求的更多示例,包括同步和异步两种方式。
同步POST请求示例
示例1:发送表单数据
import httpx# 目标URL
url = 'https://example.com/api/form'# 表单数据
form_data = {'username': 'testuser','password': 'testpass'
}# 使用httpx发送同步POST请求(表单数据)
with httpx.Client() as client:response = client.post(url, data=form_data) # 注意这里使用data参数发送表单数据# 打印响应状态码和响应内容
print(response.status_code)
print(response.text) # 假设服务器返回的是文本格式的响应体
示例2:发送JSON数据并设置请求头
import httpx# 目标URL
url = 'https://example.com/api/json'# JSON数据
json_data = {'name': 'John Doe','age': 30
}# 自定义请求头
headers = {'Content-Type': 'application/json','Authorization': 'Bearer your_token_here'
}# 使用httpx发送同步POST请求(JSON数据+自定义请求头)
with httpx.Client() as client:response = client.post(url, json=json_data, headers=headers) # json参数会自动设置Content-Type为application/json# 打印响应状态码和响应内容
print(response.status_code)
print(response.json()) # 假设服务器返回的是JSON格式的响应体
异步POST请求示例
示例1:发送JSON数据
import httpx
import asyncio# 异步函数,用于发送POST请求(JSON数据)
async def fetch_json(url, data):async with httpx.AsyncClient() as client:response = await client.post(url, json=data)return response# 目标URL
url = 'https://example.com/api/json'# JSON数据
json_data = {'name': 'Jane Doe','email': 'jane.doe@example.com'
}# 使用asyncio运行异步函数
async def main():response = await fetch_json(url, json_data)# 打印响应状态码和响应内容print(response.status_code)print(response.json()) # 假设服务器返回的是JSON格式的响应体# 运行异步主函数
asyncio.run(main())
示例2:发送文件数据
import httpx
import asyncio# 异步函数,用于发送POST请求(文件数据)
async def upload_file(url, file_path):async with httpx.AsyncClient() as client:with open(file_path, 'rb') as file:files = {'file': ('filename', file, 'application/octet-stream')}response = await client.post(url, files=files)return response# 目标URL
url = 'https://example.com/api/upload'# 文件路径
file_path = '/path/to/your/file.txt'# 使用asyncio运行异步函数
async def main():response = await upload_file(url, file_path)# 打印响应状态码和响应内容print(response.status_code)print(response.text) # 假设服务器返回的是文本格式的响应体# 运行异步主函数
asyncio.run(main())
在这些示例中,我们展示了如何使用httpx
库发送不同类型的POST请求,包括表单数据、JSON数据、自定义请求头以及文件上传。无论是同步还是异步方式,httpx
都提供了简洁且强大的API来满足各种HTTP请求需求。
3. 总结
综上所述,httpx
作为新一代的Python HTTP客户端库,在异步支持、HTTP/2支持、性能提升以及功能丰富性等方面都优于requests
库。如果你正在寻找一个强大且灵活的HTTP客户端库来处理你的Python网络编程需求,那么httpx
无疑是一个值得考虑的选择。
无论你是初学者还是经验丰富的开发者,都可以通过学习和使用httpx
来提升你的Python网络编程技能。希望这篇博客能够帮助你更好地理解和使用httpx
库!
相关文章:
Python中的HTTP客户端库:httpx与request | python小知识
Python中的HTTP客户端库:httpx与request | python小知识 在Python中,发送HTTP请求和处理响应是网络编程的基础。requests和httpx是两个常用的HTTP库,它们都提供了简洁易用的API来发送HTTP请求。然而,httpx作为新一代的HTTP客户端…...

【Python】Python入门基础——环境搭建
学习Python,首先需要搭建一个本地开发环境,或是使用线上开发环境(各类练习网站),这里主要记录本地开发环境的配置。 目录: 一、下载和安装python解释器 官网下载地址:Download Python | Pytho…...

2025 pwn_A_childs_dream
文章目录 fc/sfc mesen下载和使用推荐 fc/sfc https://www.mesen.ca/docs/ mesen2安装,vscode安装zg 任天堂yyds w d 左右移动 u结束游戏 i崩溃或者卡死了 L暂停 D658地方有个flag 发现DEEE会使用他。且只有这个地方,maybe会输出flag,应…...
面试题整理:操作系统
文章目录 操作系统操作系统基础1. 操作系统的功能?2. 什么是用户态和内核态? 进程和线程1. 是什么?区别?2. ⭐线程间的同步的方式有哪些?3. PCB 是什么?包含哪些信息?4. 进程的状态有哪些&#…...

构建未来教育的基石:智慧校园与信息的重要性
随着科技的迅猛发展,教育领域正经历一场深刻的变革。在这个过程中,“智慧校园”作为教育信息化的重要实践,扮演着不可或缺的角色。智慧校园不仅仅是硬件设施的升级,更是一种全新的教育理念,强调利用信息技术优化教育资…...
C# 控制台相关 API 与随机数API
C# 控制台相关 API 与随机数API 控制台输入输出 功能说明 Console.WriteLine(string): 输出字符串并换行Console.Write(string, string): 输出字符串不换行Console.ReadLine(): 等待用户输入并返回字符串Console.ReadKey(bool).KeyChar: 读取按键,指定是否显示输…...

【踩坑】⭐️MyBatis的Mapper接口中不建议使用重载方法
目录 🍸前言 🍻一、背景 🍹二、问题处理 💞️三、处理方法 🍸前言 小伙伴们大家好,很久没有水..不是,写文章了,都收到系统的消息了;我算下时间,上周是单休…...
CSS Grid 网格布局,以及 Flexbox 弹性盒布局模型,它们的适用场景是什么?
CSS Grid网格布局和Flexbox弹性盒布局模型都是现代CSS布局的重要工具,它们各自具有独特的优势和适用场景。 作为前端开发工程师,理解这些布局模型的差异和适用场景对于编写高效、可维护的代码至关重要。 CSS Grid网格布局 适用场景: 复杂…...

HDFS体系结构
HDFS 支持主从结 构 , 主节 点 称为 NameNode ,从节点称为 DataNode HDFS中还包含一个 SecondaryNameNode 进程,只要辅助主节点 公司BOSS:NameNode (NN) 秘书:SecondaryNameNode (2NN) 员工&a…...
AI大模型的技术突破与传媒行业变革
性能与成本:AI大模型的“双轮驱动” 过去几年,AI大模型的发展经历了从实验室到产业化的关键转折。2025年初,以DeepSeek R1为代表的模型在数学推理、代码生成等任务中表现超越国际头部产品,而训练成本仅为传统模型的几十分之一。这…...

vscode/cursor+godot C#中使用socketIO
在 Visual Studio Code(VS Code)中安装 NuGet 包(例如SocketIOClient),你可以通过以下几种方法: 方法 1:使用dotnet cli 打开终端:在 VS Code 中按下Ctrl 或者通过菜单View -> Terminal打开终端。 导…...
分段线性插值
分段线性插值 分段线性插值,就是将插值点用折线段连接起来逼近f(x)。设已知节点 a x 0 < x 1 < ⋅ ⋅ ⋅ < x n b ax_0<x_1<<x_nb ax0<x1<⋅⋅⋅<xnb上的函数值 f 0 , f 1 , . . . , f n f_0,f_1,...,f_n f0,f1,...,fn&a…...

制作一个项目用于研究elementUI的源码
需求:修改el-tooltip的颜色,发现传递参数等方法都不太好用,也可以使用打断点的方式,但也有点麻烦,因此打算直接修改源码,把组件逻辑给修改了 第一步下载源码 源码地址 GitHub - ElemeFE/element: A Vue.j…...

[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程
一、前言 在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程: DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教…...
vLLM专题(二):安装-CPU
vLLM 是一个 Python 库,支持以下 CPU 变体。选择您的 CPU 类型以查看供应商特定的说明: Intel/AMD x86 vLLM 最初支持在 x86 CPU 平台上进行基本模型推理和服务,支持的数据类型包括 FP32、FP16 和 BF16。 注意 此设备没有预构建的 wheel 包或镜像,因此您必须从源代码构建 v…...

JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
文章目录 1. 类加载检查2. 内存分配① 指针碰撞② 空闲列表线程安全问题: 3. 内存空间初始化4. 对象头设置5. 对象初始化 当Java虚拟机遇到一条 new指令时,会执行以下步骤来创建对象: 1. 类加载检查 首先检查new指令的参数是否能在常量池中…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter14-DOM
十四、DOM 文档对象模型(DOM,Document Object Model)是 HTML 和 XML 文档的编程接口。DOM 表示由多层节点构成的文档,通过它开发者可以添加、删除和修改页面的各个部分。脱胎于网景和微软早期的动态 HTML(DHTML&#x…...
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具(中英双语)
外汇掉期(FX Swap):全球企业管理外汇风险的关键工具 引言 在全球化经济环境下,跨国公司、银行和金融机构经常面临外汇风险,因为它们的业务涉及多种货币。例如,一家中国公司可能需要欧元支付欧洲供应商&am…...
verilog程序设计及SystemVerilog验证
1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV),或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构: Testbench是一个测试平台,信号…...

Unity DeepSeek API 聊天接入教程(0基础教学)
Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...

STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...

2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...