⛳️ 准备工作
任何模块学习前,都需要执行下述两个步骤
模块简介
模块安装
帮助手册的准备
HTTPX 是最近接触到的一个 Python 请求模块,其特点如下所示
兼容 requests,语法类似
支持 HTTP/1.1 和 HTTP/2
严格超时设置
全类型注释
……
目前最新的版本是 0.22 版本,官方简介如下
HTTPX is a fully featured HTTP client library for Python 3. It includes an integrated command line client, has support for both HTTP/1.1 and HTTP/2, and provides both sync and async APIs.
模块安装使用如下命令即可
官网与项目地址为
⛳️ 简单上手
接下来编写一个采集 example
网站的案例,代码如下所示
import httpx
r = httpx.get('https://www.example.org/')
print(r) # 响应对象
print(r.status_code) # 状态码
print(r.text) # 响应内容
print(r.content) # 响应二进制
# print(r.json()) # 响应JSON
复制代码
这样看起来与 requests
模块用法非常类似。
接下来我们拿 `` 站点做一下 HTTP 动词相关测试
import httpx
r = httpx.put('https://httpbin.org/put', data={'name': '橡皮擦'})
print("*** put ***")
print(r.text)
r = httpx.delete('https://httpbin.org/delete')
print("*** delete ***")
print(r.text)
r = httpx.head('https://httpbin.org/get')
print("*** head ***")
print(r)
r = httpx.options('https://httpbin.org/get')
print("*** options ***")
print(r)
复制代码
⛳️ get 请求携带参数
既然类似 requests,那我们直接模拟写一下基本使用,同时下述代码也增加了请求头配置。
import httpx
get_param_data = {'name': '梦想橡皮擦'}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ……'
}
response = httpx.get(url='http://www.httpbin.org/get', params=get_param_data, headers=headers)
print(response.text)
复制代码
⛳️ 类 requests 的 Session 用法
在 httpx
中也存在 Session 类似的用法,测试代码如下所示:
import httpx
client = httpx.Client() # 类 requests.Session()
try:
r = client.get(url='http://www.httpbin.org/get')
print(r.text)
finally:
client.close()
复制代码
同样也可以使用 with 上下文语句进行展示
import httpx
client = httpx.Client() # 类 requests.Session()
with httpx.Client() as client:
r = client.get('https://example.com')
print(r)
复制代码
⛳️ 支持异步调用
之前我们使用 asyncio
和 aiohttp
实现异步调用,有了 httpx
之后,可以直接使用其自带的异步调用代码,具体如下所示
import asyncio
import httpx
async def main():
async with httpx.AsyncClient() as client:
resp = await client.get('http://httpbin.org/get')
assert resp.status_code == 200
html = resp.text
print(html)
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
loop.close()
复制代码
异步请求的发送使用 httpx.AsyncClient()
。
⛳️ 请求中的其它参数
自定义 headers 在请求中增加头文件配置
headers = {"key":"value"}
r = httpx.get("http://httpbin.org/get", headers=header)
复制代码
超时时间httpx
默认超时时间为 5 秒,通过 timeout 可以进行修改
r = httpx.get("http://httpbin.org/get", timeout=3)
复制代码
该时间还可以通过 httpx.Timeout
类实现,可以细致设置 connect
, read
, write
, pool
超时时间。
timeout = httpx.Timeout(5,read=10)
复制代码
SSL 证书使用参数 verify
进行证书设置,也可以使用标准库 ssl
进行设置。当然禁用 SSL 验证与 requests
一致,使用下述代码
httpx.get('http://httpbin.org/get', verify=False)
复制代码
⛳️ 参数传递
查询参数
params = {"name":"橡皮擦", "age":18}
httpx.get('http://httpbin.org/get', params=params)
复制代码
Form 表单
data = {"name":"橡皮擦", "age":18}
httpx.get('http://httpbin.org/get', data = data)
复制代码
文件上传
f = open('a.txt', 'rb')
files = {'file': f}
response = httpx.post('http://xxxxx', files=files)
f.close()
复制代码
JSON 传递
data = {"name":"橡皮擦", "age":18}
response = httpx.post('http://xxxxx', json=data )
复制代码
二进制数据
content = b'橡皮擦'
response = httpx.post('http://xxxxx', content=content)
复制代码
⛳️ 响应内容
httpx
模块返回的响应请求有文本响应
二进制响应
JSON 响应
流式响应迭代字节
迭代文本
迭代行
原始字节
📣📣📣📣📣📣🌻本文如果发现错误,欢迎在评论区中指正哦💗<a href="#"><<<上一篇</a> 📖<a href="#">系列目录</a> <a href="#">下一篇>>></a>
评论