#快捷函数
源码: https://github.com/x-haose/hs-net/blob/main/examples/basic/shortcuts.py
shortcuts.py
"""
快捷函数
无需实例化 Net / SyncNet,通过模块级函数直接发起请求。
每次调用会创建临时客户端,适合简单的一次性请求场景。
需要复用连接、配置中间件、控制并发时,请使用 Net / SyncNet。
"""
import asyncio
import hs_net
# ==================== 同步快捷函数 ====================
def sync_examples():
"""同步快捷函数示例。"""
# GET 请求
resp = hs_net.sync_get("https://example.com", retries=0)
print(f"GET: {resp.status_code} - {resp.css('title::text').get()}")
# POST 请求
resp = hs_net.sync_post(
"https://httpbin.org/post",
json_data={"name": "hs-net", "version": "0.2.0"},
retries=0,
)
print(f"POST: {resp.jmespath('json.name')}")
# 带参数的请求
resp = hs_net.sync_get(
"https://httpbin.org/get",
params={"q": "python", "page": "1"},
headers={"Accept": "application/json"},
timeout=10.0,
retries=0,
)
print(f"带参数: {resp.jmespath('args')}")
# 通用 request 方法
resp = hs_net.sync_request("PUT", "https://httpbin.org/put", json_data={"updated": True}, retries=0)
print(f"PUT: {resp.status_code}")
# ==================== 异步快捷函数 ====================
async def async_examples():
"""异步快捷函数示例。"""
# GET 请求
resp = await hs_net.get("https://example.com", retries=0)
print(f"GET: {resp.status_code} - {resp.css('title::text').get()}")
# POST 请求
resp = await hs_net.post(
"https://httpbin.org/post",
json_data={"name": "hs-net", "version": "0.2.0"},
retries=0,
)
print(f"POST: {resp.jmespath('json.name')}")
# 并发请求(注意:每次调用都创建新客户端,高并发场景建议用 Net)
urls = [f"https://example.com/?id={i}" for i in range(5)]
tasks = [hs_net.get(url, retries=0) for url in urls]
results = await asyncio.gather(*tasks)
print(f"并发: {len(results)} 个请求, 全部成功: {all(r.ok for r in results)}")
# ==================== 指定引擎 ====================
def engine_examples():
"""通过 engine 参数指定引擎。
注意: 非 httpx 引擎需要额外安装:
pip install hs-net[curl] # curl-cffi
pip install hs-net[requests] # requests
pip install hs-net[requests-go] # requests-go
"""
from hs_net import EngineEnum, EngineNotInstalled
# 使用 requests 引擎
try:
resp = hs_net.sync_get("https://example.com", engine=EngineEnum.REQUESTS, retries=0)
print(f"requests 引擎: {resp.status_code}")
except EngineNotInstalled as e:
print(f"引擎未安装: pip install {e.install_package}")
# 使用 curl_cffi 引擎
try:
resp = hs_net.sync_get("https://example.com", engine=EngineEnum.CURL_CFFI, retries=0)
print(f"curl_cffi 引擎: {resp.status_code}")
except EngineNotInstalled as e:
print(f"引擎未安装: pip install {e.install_package}")
if __name__ == "__main__":
print("=== 同步快捷函数 ===")
sync_examples()
print("\n=== 异步快捷函数 ===")
asyncio.run(async_examples())
print("\n=== 指定引擎 ===")
engine_examples()
