想象一下,你正急于抓取一个网站上的最新数据,在编码的世界中翻飞而行,便捷高效是你处理任务时最看重的特质。
在一个如同大都市拥挤不堪的网络中,你需要一辆能够轻巧穿梭并且强大可靠的"跑车",那就必须是一个优秀的 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 即可一键安装:
pipinstallhttpx
基本用法:
httpx 的使用方式和 requests 类似,对于初学者来说,从 requests 迁移到 httpx 是一件轻松的事情。
importhttpx #发送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 关键字来发起异步请求:
importhttpx importasyncio asyncdefget_async_data(url): asyncwithhttpx.AsyncClient()asclient: returnawaitclient.get(url) #运行异步函数 asyncio.run(get_async_data('https://www.example.com'))
在这个例子中,我们创建了一个异步函数 get_async_data
,它使用了 httpx 的 AsyncClient
来执行异步的 GET 请求。这就允许你同时发起多个网络请求,它们将在单个或多个事件循环中并行运行。
HTTP/2 支持:
httpx 对 HTTP/2 的支持允许更高效的网络请求,减少了延迟并提高了吞吐量。启用 HTTP/2 非常简单:
importhttpx #HTTP/2会话 withhttpx.Client(http2=True)asclient: 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: 获取网站内容
importhttpx deffetch_site(url): withhttpx.Client()asclient: response=client.get(url) print('StatusCode:',response.status_code) print('Headers:',response.headers) fetch_site('https://www.example.com')
运行此代码,你将看到指定网站的状态码和响应头部信息。
练习 2: 异步获取多个网站内容
importasyncio asyncdeffetch_site_async(url): asyncwithhttpx.AsyncClient()asclient: response=awaitclient.get(url) print('URL:',url) print('StatusCode:',response.status_code) print('Headers:',response.headers) asyncdefmain(): urls=['https://www.example.com','https://www.python.org','https://www.github.com'] tasks=[fetch_site_async(url)forurlinurls] awaitasyncio.gather(*tasks) asyncio.run(main())
运行此代码,你将以异步的方式分别访问多个网站,并同时打印出每一个网站的 HTTP 响应码和头信息。
练习 3: 开启 HTTP/2 特性
修改“练习 1”的 fetch_site
函数,通过开启 HTTP/2 来请求网站:
deffetch_site_http2(url): withhttpx.Client(http2=True)asclient: response=client.get(url) print('HTTPVersion:',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/
以上就是“Httpx —— 一个超牛的 Python 库”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。