跳到主要内容

四、外部通信

四、外部通信

4.1 HTTP请求

🌐 http_request(url, method, body, headers=None)

功能: 发送HTTP请求获取外部数据

参数:

  • url: 请求URL
  • method: 请求方法,如"GET", "POST"等
  • body: 请求体内容,可选。可以是Python字典、列表或任何可序列化的Python对象,会自动转换为JSON字符串
  • headers: 请求头字典,可选

返回值:

  • Result结构: 包含OkErr字段的字典
  • 成功时: {"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对象无法序列化,会返回详细的错误信息