使用CURL调用FreeAgent CRM GraphQL API时遇查询字符串缺失报错
问题解决:FreeAgent CRM GraphQL API返回"Must provide query string"错误
核心问题分析
你的请求存在两个关键问题,导致服务器无法正确解析GraphQL查询:
- 缺少Content-Type请求头:GraphQL POST请求需要明确指定
Content-Type: application/json,否则服务器可能将请求体当作表单数据解析,无法识别query字段。 - JSON格式错误+变量传递不规范:你在query中直接硬编码变量值,且未处理JSON内部的双引号冲突,导致请求体格式无效;同时GraphQL规范要求变量需通过单独的
variables字段传递,而非直接嵌入query定义。
修正后的CURL命令
curl -i \ -H "Authorization: bearer MY_TOKEN" \ -H "Content-Type: application/json" \ -X POST \ -d '{ "query": "query getFields($entity:String,$show_hidden:Boolean) { getFields(entity:$entity,show_hidden:$show_hidden){ id name name_label main_type is_required is_visible is_unique default_value catalog_type_id reference_field_id reference_fa_entity_id reference_fa_entity_name }}", "variables": { "entity": "products", "show_hidden": false } }' https://freeagent.network/api/graphql
关键修正点说明
- 添加Content-Type头:明确告知服务器请求体为JSON格式,确保正确解析
query和variables字段。 - 分离query与variables:将包含变量占位符的查询定义放在
query字段,变量值单独存入variables对象,既符合GraphQL规范,也避免了引号嵌套冲突。 - 规范JSON格式:用单引号包裹完整请求体,内部双引号无需额外转义,保证JSON结构合法。
额外检查项
- 确认
MY_TOKEN为有效访问令牌,格式需严格遵循bearer 空格 + 令牌字符串(你的命令格式正确,但需确保令牌未过期)。 - 验证查询字段与FreeAgent CRM API实际定义一致,可通过官方提供的GraphQL调试工具先测试查询正确性。
内容的提问来源于stack exchange,提问作者user2355051
相关产品推荐
相关产品推荐

