四、外部通信
四、外部通信
4.1 HTTP请求
🌐 http_request(url, method, body, headers=None)
功能: 发送HTTP请求获取外部数据
参数:
url: 请求URLmethod: 请求方法,如"GET", "POST"等body: 请求体内容,可选。可以是Python字典、列表或任何可序列化的Python对象,会自动转换为JSON字符串headers: 请求头字典,可选
返回值:
- Result结构: 包含
Ok或Err字段的字典 - 成功时:
{"Ok": response_data}- 响应数据已转换为Python对象 - 失败时:
{"Err": error_info}- 包含错误信息
示例:
# ✅ GET请求示例 - 获取交易所合约信息
url = "https://api.gateio.ws/api/v4/futures/usdt/contracts/BTC_USDT"
result = trader.http_request(url, "GET", None, None)
if "Ok" in result:
contract_info = result["Ok"]
print(f"BTC_USDT合约信息: {contract_info}")
else:
error = result.get("Err", "未知错误")
print(f"获取合约信息失败: {error}")
# ✅ POST请求示例 - 使用JSONPlaceholder测试API
post_url = "https://jsonplaceholder.typicode.com/posts"
post_data = {
"title": "测试POST请求",
"body": "这是一个测试POST请求的内容",
"userId": 1
}
headers = {"Content-Type": "application/json"}
# 直接传递Python字典,Rust端会自动序列化为JSON
result = trader.http_request(post_url, "POST", post_data, headers)
if "Ok" in result:
post_response = result["Ok"]
print(f"POST请求结果: {post_response}")
print(f"创建的文章ID: {post_response.get('id')}")
else:
error = result.get("Err", "未知错误")
print(f"POST请求失败: {error}")
重要说明:
- 自动序列化:
body参数支持Python字典、列表等可序列化对象,会在Rust端自动转换为JSON字符串 - 无需手动序列化: 不再需要使用
json.dumps()手动序列化数据 - 向后兼容: 仍然支持传递字符串作为body参数
- Result处理: 返回值需要检查
Ok字段来确定是否成功 - 错误处理: 如果传入的Python对象无法序列化,会返回详细的错误信息