使用curl带--data-raw发送JSON报Unexpected character错误如何解决
问题根因
你传入--data-raw的内容是原生GraphQL查询语句,并非接口要求的JSON结构。当你指定Content-Type: application/json时,服务端会将请求体当做JSON解析,原生GraphQL查询语句不符合JSON语法规范,因此抛出「期望双引号开头的字段名」错误。你之前校验时应该是把GraphQL查询语句单独校验了,没有按照接口要求的JSON结构封装,才会误以为内容合法。
解决方案
GraphQL的POST请求需要将查询语句封装在JSON的query字段中,macOS/Linux环境下可直接使用下方修改后的curl命令:
curl --request POST "https://app.io/api/graphql?accountId=Xzg" \ --header "x-api-key: WHpnV=" \ --header "Content-Type: application/json" \ --data-raw '{"query": "{applications(limit: 2) {nodes {name}}}"}'
特殊场景适配
- 如果你的查询包含变量,可在JSON中新增
variables字段传递参数,请求体结构示例如下:
{ "query": "query getApps($limit: Int!) {applications(limit: $limit) {nodes {name}}}", "variables": {"limit": 2} }
- Windows cmd环境执行时不支持单引号包裹请求体,需要将单引号替换为双引号,同时转义内部的双引号:
curl --request POST "https://app.io/api/graphql?accountId=Xzg" --header "x-api-key: WHpnV=" --header "Content-Type: application/json" --data-raw "{\"query\": \"{applications(limit: 2) {nodes {name}}}\"}"
内容的提问来源于stack exchange,提问作者vel
相关产品推荐
相关产品推荐

