You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Axie服务器的最小GraphQL查询,解决C++请求Bad Request问题

问题解决说明

1. 接口选择说明

你提供的两个接口中,优先使用https://graphql-gateway.axieinfinity.com/graphql(v1接口)即可,二者区别如下:

  • v1接口是官方对外公开的网关,面向第三方开发者设计,无需特殊授权即可调用公开的Axie数据,版本稳定、兼容性好,完全满足你获取Axie详情的需求。
  • v2接口是官方内部服务专用接口,仅供给官方前端、自有工具调用,需要附带指定请求头和身份校验信息,无授权调用会直接返回错误,不适合第三方开发者使用。

2. 查询错误修正

你现在返回Bad Request的核心原因是请求的JSON格式、GraphQL查询语法存在错误,和C++处理\n的逻辑无关,GraphQL服务端对换行、空格的兼容性很高,只要JSON结构正确就能正常解析。

原有代码的错误点:

  • 请求的JSON结构拼接错误,query字段结尾多了多余的双引号,转义符错位
  • GraphQL查询结构错误,fragment的定义和使用逻辑错误,不需要在fragment内重复传axieId参数
  • http.cpp的parseUrl函数存在笔误:第二个if (ret[0]=="https")应该改为if (ret[0]=="http"),否则调用http接口会出现端口错误(你当前用https暂时不会触发,但建议修正)

修正后的查询写法(推荐用C++原始字符串字面量,避免转义错误):

// main.cpp 中query变量替换为以下内容即可
string query = R"({
  "operationName": "GetAxieDetail",
  "variables": {
    "axieId": "5144540"
  },
  "query": "query GetAxieDetail($axieId: ID!) { axie(axieId: $axieId) { id name class breedCount owner image stats { health speed skill morale } } }"
})";

如果需要更多Axie属性,直接在axie后的大括号内添加对应字段即可,无需一开始就使用复杂的fragment,先跑通最小可用查询再逐步扩展字段即可。

内容的提问来源于stack exchange,提问作者Pierre Abbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:15:01