执行GraphQL的curl命令时遇大括号不匹配错误求助
解决curl调用GraphQL接口的语法错误
问题分析
你的curl命令有两个核心问题:
- 错误地把预期的接口响应内容
{"data":{"about":"Hello World!"}}直接追加到了命令末尾,这部分是接口返回的结果,不是curl的命令参数,必须移除。 - Shell环境下,双引号包裹的JSON里的大括号、内部双引号会被shell当成特殊语法解析,导致curl识别出错。
正确命令示例
方法1:用单引号包裹请求数据(推荐,更简洁)
单引号在shell中不会解析内部的特殊字符,直接用它包裹JSON数据即可:
curl "http://localhost:3000/graphql" \ -H "Accept-Encoding: gzip, deflate, br" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "Connection: keep-alive" \ -H "DNT: 1" \ -H "Origin: http://localhost:3000" \ --data-binary '{"query":"query { about }"}' \ --compressed
方法2:双引号包裹并正确转义内部字符
如果必须使用双引号,需要把JSON内部的双引号用反斜杠\转义,同时移除多余的响应内容:
curl "http://localhost:3000/graphql" \ -H "Accept-Encoding: gzip, deflate, br" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "Connection: keep-alive" \ -H "DNT: 1" \ -H "Origin: http://localhost:3000" \ --data-binary "{\"query\":\"query { about }\"}" \ --compressed
额外注意
- 如果需要保留query的换行格式,在单引号版本里可以直接换行,不需要额外处理;双引号版本则需要对换行符转义,或者使用
$'...'语法(仅部分shell支持)。 --compressed是curl的标准参数,必须使用英文双破折号,不要误写成中文破折号。
内容的提问来源于stack exchange,提问作者hectorJDH
相关产品推荐
相关产品推荐

