# 开始
在大家写爬虫的时候,想必用得最多的库就是 requests 了,在长久的使用过程中,大家便会发现,若是 HTTP1.1 的链接,那么 requests 是完全没啥问题的,但如若为 HTTP2.0,那么就不行了,因为 requests 并未支持 HTTP2.0,因此本文介绍一个支持 HTTP2.0 的库 --httpx
# 正文
# 安装 httpx
pip3 install "httpx[http2]" |
# 基本使用
httpx 的 api 与 requests 相似,例如
import httpx | |
url='https://www.baidu.com' | |
res=httpx.get(url) | |
print(res.status_code) | |
print(res.text) |
有点感觉没?
相同的,也可以带上一些对象
import httpx | |
header={ | |
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54' | |
} | |
url='https://www.baidu.com' | |
res=httpx.get(url,headers=header) | |
print(res.status_code) | |
print(res.text) |
这里即是带上了一个 headers 对象
但是这并不是本文的重点!我们接着说
链接:https://spa16.scrape.center
这个链接是 HTTP2.0 的
我们使用 httpx 请求一下
import httpx | |
header={ | |
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54' | |
} | |
url='https://spa16.scrape.center' | |
res=httpx.get(url,headers=header) | |
print(res.text) |
可以发现,程序报错了!
这是怎么回事?不是说好了支持 HTTP2.0 吗?什么情况?
别急,那是因为 httpx 默认是开启的 http1.1 的,需要我们声明一下才行,如下
import httpx | |
header={ | |
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54' | |
} | |
url='https://spa16.scrape.center' | |
client=httpx.Client(http2=True) | |
res=client.get(url,headers=header) | |
print(res.text) | |
print(res.http_version) |
此处我们声明一个 Client 对象,并将 http2 设置为 true,那么便开启了 HTTP2.0 的支持
可以看到,打印出来的 HTTP 版本也确实是 HTTP2.0 的,访问成功了!
# 扩展
httpx 库还支持异步请求,异步操作请查看这一篇博客
链接