|
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。一个简单的库,也许能够开启我们的智慧之门,一个普通的方法,也许能在危急时刻挽救我们于水深火热,一个新颖的思维方式,也许能激发我们无尽的创造力,一个独特的技巧,也许能成为我们的隐形盾牌……神奇的Python库之旅,第10章目录一、初始httpx二、初级用法三、异步请求四、高级用法五、总结六、作者Info一、初始httpx说起Python里的HTTP请求库,requests几乎是无人不知、无人不晓。作为一个简洁易用的库,requests已经帮助无数开发者顺利完成了网络请求。然而,随着技术的发展,大家对功能和性能的要求越来越高,于是httpx应运而生。httpx是一个比requests更强大的库,不仅继承了requests的简洁易用,还支持异步编程、HTTP/2、连接池复用等高级特性。httpx>requests+aiohttp安装httpx在开始之前,我们需要先安装httpx,运行以下命令:pipinstallhttpx1Github项目地址:https://github.com/projectdiscovery/httpx好了,工具在手,让我们大展身手!…二、初级用法httpx的用法和requests非常相似,下面我们先来看一些基础用法。发送一个简单的GET请求importhttpxresponse=httpx.get('https://jsonplaceholder.typicode.com/posts/1')print(response.status_code)print(response.json())12345是不是很眼熟?没错,httpx的用法和requests几乎一模一样。如果你用过requests,那么上手httpx完全没有问题。发送一个POST请求importhttpxdata={'title':'foo','body':'bar','userId':1}response=httpx.post('https://jsonplaceholder.typicode.com/posts',json=data)print(response.status_code)print(response.json())1234567891011POST请求也同样简单,只需要多加一个json参数就搞定了。你可以用json、data、params等参数来发送不同类型的数据。处理请求超时处理请求超时在实际开发中非常重要,httpx也为我们提供了友好的方式。importhttpxtry:response=httpx.get('https://httpbin.org/delay/5',timeout=3.0)excepthttpx.RequestErrorasexc:print(f"Anerroroccurredwhilerequesting{exc.request.url!r}.")excepthttpx.HTTPStatusErrorasexc:print(f"Errorresponse{exc.response.status_code}whilerequesting{exc.request.url!r}.")12345678在这个示例中,我们向一个会延迟响应的URL发送请求,并设置了3秒的超时时间。若请求超时或发生其他错误,httpx会抛出相应的异常。三、异步请求异步编程可以显著提高程序的性能,尤其是在处理大量I/O操作时。httpx提供了异步支持,让我们可以轻松编写异步代码。异步GET请求首先,我们来看一个简单的异步GET请求示例。importhttpximportasyncioasyncdeffetch():asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get('https://jsonplaceholder.typicode.com/posts/1')print(response.status_code)print(response.json())asyncio.run(fetch())12345678910是不是很简单?通过asyncwith语句创建一个异步客户端,我们就可以使用await来等待请求的响应。同时发送多个请求异步编程的一个大优势是可以同时发送多个请求,显著缩短总的请求时间。importhttpximportasyncioasyncdeffetch(url):asyncwithhttpx.AsyncClient()asclient:response=awaitclient.get(url)returnresponse.json()asyncdefmain():urls=['https://jsonplaceholder.typicode.com/posts/1','https://jsonplaceholder.typicode.com/posts/2','https://jsonplaceholder.typicode.com/posts/3']tasks=[fetch(url)forurlinurls]results=awaitasyncio.gather(*tasks)forresultinresults:print(result)asyncio.run(main())1234567891011121314151617181920在这个示例中,我们使用asyncio.gather同时发送了三个请求,并打印了每个请求的结果。四、高级用法httpx还提供了许多高级功能,如HTTP/2支持、代理、连接池等,下面我们来逐一介绍。HTTP/2支持HTTP/2是新一代的HTTP协议,具有更高的性能和效率。httpx天然支持HTTP/2,我们只需要进行简单配置。importhttpxclient=httpx.Client(http2=True)response=client.get('https://www.google.com')print(response.http_version)#输出:'HTTP/2'12345代理支持在某些情况下,我们需要通过代理发送请求。httpx支持HTTP和SOCKS代理。importhttpxproxies={'http://':'http://10.10.1.10:3128','https://':'http://10.10.1.10:1080',}response=httpx.get('https://www.example.com',proxies=proxies)print(response.text)123456789连接池复用连接池复用可以显著提升性能,尤其是发送大量请求时。httpx默认启用了连接池复用,但我们也可以手动配置。importhttpxclient=httpx.Client()for_inrange(10):response=client.get('https://www.example.com')print(response.status_code)client.close()1234567在这个示例中,我们通过同一个客户端发送了10次请求,httpx会自动复用连接池,提高请求效率。更多功能,详细用法可参考官方文档:https://www.python-httpx.org/#documentation…五、总结httpx作为一个新兴的PythonHTTP请求库,以其简洁的API和强大的功能迅速受到了广泛关注。它不仅继承了requests的易用性,还在性能和功能上做了许多改进,尤其是对异步编程和HTTP/2的支持。在本文中,我们通过多个代码示例,展示了httpx的基础用法、异步请求和高级功能。希望这些内容能帮助你更好地理解和使用httpx,无论是开发个人项目还是处理复杂的网络请求,httpx都是一个值得尝试的工具。如果你对httpx感兴趣,不妨在你的项目中试用一下,相信你会爱上这个强大的库。感谢大家的阅读,希望这篇文章能给你带来帮助和启发。六、作者InfoAuthor:小鸿的摸鱼日常Goal:让编程更有趣!专注于Web开发、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!版权说明:本文禁止抄袭、转载,侵权必究!
|
|