让代码更简单

Python request无法发送Http2.0请求解决办法

重要:本文最后更新于2022-11-26 09:17:33,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

今天在写小红书图集无水印解析接口的时候发现,Python request无法发送Http2.0请求,http2.0的header头会报错,为了解决这个问题,可以使用httpx模块。

安装

httpx需要Python3.6+(使用异步请求需要Python3.8+)

复制
pip3 install httpx

python3 -m pip install httpx

如果需要使用HTTP/2,则需要安装http2的相关依赖

复制
pip3 install httpx[http2]

python3 -m pip install httpx[http2]

使用

httpx与requests库的基本使用方法几乎是一模一样的

复制
import httpx
r = httpx.get('https://httpbin.org/get')
print(r) 

类似的,我们也可以使用POST, PUT, DELETE, HEAD和OPTIONS等请求方法,如下

复制
r = httpx.post('https://httpbin.org/post', data={'key': 'value'})
r = httpx.put('https://httpbin.org/put', data={'key': 'value'})
r = httpx.delete('https://httpbin.org/delete')
r = httpx.head('https://httpbin.org/get')
r = httpx.options('https://httpbin.org/get')

带有请求头和请求参数的请求

复制
import httpx
headers = {'user-agent': 'my-app/1.0.0'}
params = {'key1': 'value1', 'key2': 'value2'}
url = 'https://httpbin.org/get'
r = httpx.get(url, headers=headers, params=params)
print(r)
print(r.status_code) # 状态码
print(r.encoding) # 文本编码
print(r.text)
print(r.json())


请求带有cookies

复制
import httpx
url = 'http://httpbin.org/cookies'
cookies = {'color': 'green'}
r = httpx.get(url, cookies=cookies)
print(r.json()) # {'cookies': {'color': 'green'}}

设置超时时间

复制
import httpx
r = httpx.get('http://httpbin.org', timeout=0.001)
print(r)

超过设置时间则报httpx.ConnectTimeout: timed out

我们使用上面的请求方式时,httpx每次发送请求都需要建立一个新的连接,然而随着请求的数量增加,整个程序的请求效率就会变得很低。

httpx提供了Client来解决以上问题,Client是基于HTTP连接池实现的,这意味着当你对一个网站发送多次请求的时候,Client会保持原有的TCP连接,从而提升程序的执行效率。

创建一个client对象,使用该对象去做相应的请求

复制
import httpx

with httpx.Client() as client:
    headers = {'X-Custom': 'value'}
    r = client.get('https://example.com', headers=headers)
    print(r.text)

想了解更多可以去httpx官方文档中查看。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐