CURL调用第三方API时密码含&符号被转为布尔值如何解决
问题根因
- 核心触发原因是Shell命令行的特殊字符解析逻辑:你在终端直接执行curl命令时,未对请求体做特殊字符隔离,
&会被Shell识别为后台进程分隔符,直接截断请求内容,导致发送到服务端的JSON结构被破坏,才会出现异常解析为布尔键值对的问题。Postman发送请求不会经过Shell解析,因此可以正常传递原始密码。 - 你提供的请求JSON本身存在语法错误:包含非标准的PHP风格数组语法
array:1、=>,同时缺少必要的字段分隔逗号,会进一步加剧服务端的JSON解析异常。
修复方案
- 首先修正为标准合法的JSON格式,补全分隔逗号,删除非标准语法:
{ "auth_token": "eyJhbGciOiJSUzI1NiIsInR5cC", "data": { "enabled": true, "sip": [ { "password": "O5t[&[ec" } ] } }
- curl调用时使用单引号完整包裹请求体内容,避免Shell解析其中的特殊字符,示例命令如下:
curl -X POST <你的第三方API请求地址> \ -H "Content-Type: application/json" \ -d '{ "auth_token": "eyJhbGciOiJSUzI1NiIsInR5cC", "data": { "enabled": true, "sip": [ { "password": "O5t[&[ec" } ] } }'
- 更稳妥的方案是将请求体写入独立JSON文件,通过curl的
@语法直接读取文件内容,彻底规避Shell的特殊字符解析问题:- 将修正后的JSON保存为
request.json文件 - 执行如下curl命令:
curl -X POST <你的第三方API请求地址> \ -H "Content-Type: application/json" \ -d @request.json - 将修正后的JSON保存为
内容的提问来源于stack exchange,提问作者maali
相关产品推荐
相关产品推荐

