前言
相信你和我一样,在日常的工作中,requests
库被广泛使用。今天我要为你介绍一款号称下一代全功能的 HTTP
客户端:httpx
。
什么是 httpx
httpx
是 Python3
的全功能客户端,支持同步&异步 API
,同时支持 HTTP/1.1
和 HTTP/2
。
相比其他 HTTP
库,httpx
具有更加易用的接口,更加强大的功能,是未来 Python
开发者的不二选择。
安装和使用
安装
pip install httpx 复制代码
get
import httpx # get obj res = httpx.get('https://www.baidu.com') print(res,res.status_code) # response content,text print(res.content,res.text) 复制代码
网络异常,图片无法展示
|
对于
content
和text
的去区别,从图中可以直观的看到,content
的类型为bytes
,而text
的类型为str
。
post
# post obj res = httpx.post('http://127.0.0.1:4523/mock/351132/pet',data={'name':'Python测试和开发','status':'Python_Lab'}) print(res.text,type(res.content),res.status_code,res.encoding) 复制代码
网络异常,图片无法展示
|
因为我们使用了
mock server
,所以接口返回的数据可能和我们请求的不一致。
put
# put pbj res = httpx.put('http://127.0.0.1:4523/mock/351132/pet',params={'apifoxResponseId':'321249'}) print(res.status_code,res.encoding,res.text) 复制代码
网络异常,图片无法展示
|
delete
# delete obj res = httpx.delete('http://127.0.0.1:4523/mock/351132/pet/1') print(res.status_code,res.encoding,res.text) 复制代码
网络异常,图片无法展示
|
高级用法
处理 json
通常对于
content
返回是bytes
或者str
的数据,我们需要单独使用json
模块进行数据转换,但是现在我们可以直接使用httpx
为我们提供的json
方法拿到字典对象,从而方便的进行数据处理。
import httpx # json res = httpx.get('https://getman.cn/mock/post') print(type(res.text),type(res.content),type(res.json()),res.json()) 复制代码
网络异常,图片无法展示
|
处理二进制
当我们需要下载图片的时候,通常我们是将 content
的内容分块读取,然后写入文件。但是 httpx
建议我们使用 pillow
和 io
来处理图片的二进制内容。
import httpx from PIL import Image from io import BytesIO # bytes res = httpx.get('http://localhost:8765/um/imgs/') print(res.status_code) ff = Image.open(BytesIO(res.content)) ff.save('xx.png') 复制代码
网络异常,图片无法展示
|
httpx
支持所有requests
的raise_for_status()
等所有方法,还新增了部分特性,例如httpx.codes.OK
代替200
响应码的短语等动能。总之,httpx
是一款值得学习的优秀软件。
官方文档
以上就是今天的全部内容了,感谢您的阅读,我们下节再会。