Python Httpx库实现超跑式网络请求用法实例

 更新时间:2024年01月22日 08:46:25   作者:晓飞的李 管窥程序  
这篇文章主要为大家介绍了Python Httpx库实现超跑式网络请求用法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

想象一下,你正急于抓取一个网站上的最新数据,在编码的世界中翻飞而行,便捷高效是你处理任务时最看重的特质。

在一个如同大都市拥挤不堪的网络中,你需要一辆能够轻巧穿梭并且强大可靠的"跑车",那就必须是一个优秀的 HTTP 客户端库。

过去,requests 凭借其简洁和易用性成为了你的首选。但现在,httpx 脱颖而出,就像是一辆装有涡轮增压的跑车,它提供了解决现代网络挑战所需要的所有新功能和性能提升 —— 包括但不限于异步支持、HTTP/2、连接超时等。如果你希望自己的网络请求像运动跑车一样,那么 httpx 无疑是你的不二选择。

什么是 httpx?

httpx 是一个现代化的 HTTP 客户端,由 Tom Christie 领导开发,他同样是著名的 Django REST framework 的原作者。httpx 开源项目旨在提供一个功能丰富,使得发送 HTTP 请求更为简便的库。它的项目代码托管在GitHub[1]上,并且支持最新的 Python3 版本。

与requests 库类似,httpx 提供了易用的 API 进行 HTTP 通信,但它是建立在异步 I/O(asyncio)之上,针对现代网络编程提供了更强大的支持,如 HTTP/2、连接池等高级功能。对于需要在 Python 应用中执行 HTTP 请求的开发者来说,httpx 能够提供更高效的性能和更丰富的特性。

如果把 requests 比作是一艘稳定的货轮,那么 httpx 无疑就是一艘配备了最新动力系统的快艇。比如:httpx 支持 HTTP/2 协议,这允许多个请求在同一连接上并发执行,从而显著提高了通信效率。此外,它还内置了对异步请求的支持,这意味着在处理大量请求或高并发的情况时,httpx 表现更为出色。

安装 httpx

安装 httpx 非常简单,通过 pip 即可一键安装:

pip install httpx

基本用法

httpx 的使用方式和 requests 类似,对于初学者来说,从 requests 迁移到 httpx 是一件轻松的事情。

import httpx

# 发送 GET 请求 
response = httpx.get('https://www.example.com')
print(response)

# 发送 POST 请求 
response = httpx.post('https://www.example.com/post', data={'key': 'value'})
print(response)

这些示例代码展示了如何使用 httpx 发送基本的 GET 和POST 请求。

当涉及到请求体和参数时,httpx 同样优雅灵活:

# 上传文件
files = {'file': open('report.xls', 'rb')}
response = httpx.post('https://httpbin.org/post', files=files)

同时,使用 httpx 处理 JSON 数据简直不要太 easy!

# 发送json数据
response = httpx.post('https://httpbin.org/post', json={'message': 'Hello, World!'})

异步请求

httpx 最大的特色之一就是内置了对异步请求的支持。让我们来看看如何使用 async 和 await 关键字来发起异步请求:

import httpx
import asyncio

async def get_async_data(url):
    async with httpx.AsyncClient() as client:
        return await client.get(url)

# 运行异步函数 
asyncio.run(get_async_data('https://www.example.com'))

在这个例子中,我们创建了一个异步函数 get_async_data,它使用了 httpx 的 AsyncClient 来执行异步的 GET 请求。这就允许你同时发起多个网络请求,它们将在单个或多个事件循环中并行运行。

HTTP/2 支持

httpx 对 HTTP/2 的支持允许更高效的网络请求,减少了延迟并提高了吞吐量。启用 HTTP/2 非常简单:

import httpx

# HTTP/2 会话 
with httpx.Client(http2=True) as client:
    response = client.get('https://www.example.com')
    print(response.http_version)  # 输出 'HTTP/2'

开启 HTTP/2 特性只需在 httpx.Client 中设置 http2=True

扩展说明

httpx 还有许多其他高级功能等待探索,比如自定义中间件、事件钩子以及请求重试等等。但是由于篇幅限制,我们这里无法详细介绍每一项特性。建议有兴趣的读者可以访问 httpx 的官方文档[2]来深入了解。

实践

现在,来一次小练习:

  • 使用 httpx 编写一个函数,连接到你最喜欢的网站,获取内容,并打印出 HTTP 响应码和头信息。

  • 修改上面的函数,使其异步执行,并尝试同时请求多个不同的 URL。

  • 尝试开启 HTTP/2 特征,并观察它与 HTTP/1.1 相比有哪些不同之处。

练习  1: 获取网站内容

import httpx

def fetch_site(url):
    with httpx.Client() as client:
        response = client.get(url)
        print('Status Code:', response.status_code)
        print('Headers:', response.headers)

fetch_site('https://www.example.com')

运行此代码,你将看到指定网站的状态码和响应头部信息。

练习  2: 异步获取多个网站内容

import asyncio

async def fetch_site_async(url):
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        print('URL:', url)
        print('Status Code:', response.status_code)
        print('Headers:', response.headers)

async def main():
    urls = ['https://www.example.com', 'https://www.python.org', 'https://www.github.com']
    tasks = [fetch_site_async(url) for url in urls]
    await asyncio.gather(*tasks)

asyncio.run(main())

运行此代码,你将以异步的方式分别访问多个网站,并同时打印出每一个网站的 HTTP 响应码和头信息。

练习  3: 开启 HTTP/2 特性

修改“练习  1”的 fetch_site 函数,通过开启 HTTP/2 来请求网站:

def fetch_site_http2(url):
    with httpx.Client(http2=True) as client:
        response = client.get(url)
        print('HTTP Version:', response.http_version)

fetch_site_http2('https://www.example.com')

观察输出的 HTTP Version 值,以了解网站是否支持 HTTP/2。

总结

在这篇教程中,我们探讨了 httpx —— 一款现代的、功能丰富且支持异步请求的 Python HTTP 客户端库。就像我们之前比喻的,它如同是装备了最新技术的跑车,在处理现代 Web 编程的挑战时表现卓越,无论是连接的持久化、异步支持,还是 HTTP/2 协议的利用,它都有着强大的功能和明显的优势。

httpx 的出现并不是去替代 requests,而是为了满足日益增长的网络编程需求,提供了更多的选择和更好的工具。无论是作为一名经验丰富的 Python 开发者,还是一个刚刚踏入这个领域的新手,拥抱 httpx,体验上一代 HTTP 客户端库无法比拟的速度和效率,相信会让你的编程之旅更加畅快。

但正如任何技术选型一样,选择合适的工具需根据实际的项目需求。你可能还是要根据自己团队的适应度、项目的特点以及维护的便利性来做出决策。总之,httpx 无疑是 Python 生态中一个闪耀的新星,值得每一位 Python 开发者的尝试和探索。

好了,教程到此结束。希望你既能享受学习的过程,也能在实践中大放异彩!

参考资料

[1]Httpx 项目: https://github.com/encode/httpx 

[2]官方文档: https://www.python-httpx.org/ 

以上就是Python Httpx库实现超跑式网络请求用法实例的详细内容,更多关于Python Httpx库网络请求的资料请关注脚本之家其它相关文章!

相关文章

  • Python数据类型之列表和元组的方法实例详解

    Python数据类型之列表和元组的方法实例详解

    这篇文章主要介绍了Python数据类型之列表和元组的相关知识,列表是一组有序项目的集合 ,可变的数据类型可 进行增删改查,本文通过实例文字相结合的形式给大家介绍的非常详细 ,需要的朋友可以参考下
    2019-07-07
  • Jupyter notebook中如何添加Pytorch运行环境

    Jupyter notebook中如何添加Pytorch运行环境

    这篇文章主要介绍了Jupyter notebook中如何添加Pytorch运行环境,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python sorted函数详解(高级篇)

    Python sorted函数详解(高级篇)

    本文我们用到了sorted 如何进行按照键或者值进行排序,解决了字典的排序问题。文中将进一步详细介绍sorted的强大。希望对大家有所帮助
    2018-09-09
  • opencv python模糊影像检测效果

    opencv python模糊影像检测效果

    这篇文章主要介绍了opencv python模糊影像检测,本文只使用cv2和shutil库,若想直接使用该脚本需安装这两个库,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • python生成随机密码或随机字符串的方法

    python生成随机密码或随机字符串的方法

    这篇文章主要介绍了python生成随机密码或随机字符串的方法,涉及Python字符串及随机数的相关使用技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • pymongo实现多结果进行多列排序的方法

    pymongo实现多结果进行多列排序的方法

    这篇文章主要介绍了pymongo实现多结果进行多列排序的方法,涉及Python排序的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 利用Python将时间或时间间隔转为ISO 8601格式方法示例

    利用Python将时间或时间间隔转为ISO 8601格式方法示例

    国际标准化组织的国际标准ISO8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》,下面这篇文章主要给大家介绍了关于利用Python将时间或时间间隔转为ISO 8601格式的相关资料,需要的朋友可以参考下。
    2017-09-09
  • python mock测试的示例

    python mock测试的示例

    这篇文章主要介绍了python mock测试的示例,帮助大家利用python进行模拟接口测试,感兴趣的朋友可以了解下
    2020-10-10
  • Django 数据库同步操作技巧详解

    Django 数据库同步操作技巧详解

    这篇文章主要介绍了Django 数据库同步操作技巧详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python imread、newaxis用法详解

    Python imread、newaxis用法详解

    这篇文章主要介绍了python imread、newaxis用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论