使用curl -d参数发起POST请求出现unexpected token错误如何解决?
问题根源
你遇到的报错是Windows环境下curl.exe的引号解析规则导致的:
- Windows的cmd、PowerShell默认不支持单引号作为字符串参数的包裹符,你用单引号包裹POST请求的JSON body时,系统会把单引号识别为参数内容的一部分,同时直接吞掉JSON内部的所有双引号,最终提交到服务端的是没有任何引号的非法JSON,和你报错里展示的无引号内容完全吻合。
解决方案
方案1:最通用、不易出错的文件读取法(推荐)
把你的JSON请求体单独存为一个文件,比如命名为data.json,文件内容直接写你原本的正确JSON即可,不需要额外转义:
{ "status" : ["sudan"], "export_settings" : { "format": "json", "model": "modelX" } }
然后修改curl命令,用-d @data.json直接读取文件内容作为请求体:
curl.exe -k -H "Token:THisisarealtoken123" -H "Content-type:application/json" "https://api.deftesla.com/data_export" -X POST -d @data.json
该方案在cmd、PowerShell环境下都可以直接运行,不需要处理任何引号转义。
方案2:cmd环境直接传JSON
把包裹JSON的单引号替换为双引号,JSON内部的所有双引号用反斜杠\转义即可,示例命令:
curl.exe -k -H "Token:THisisarealtoken123" -H "Content-type:application/json" "https://api.deftesla.com/data_export" -X POST "{\"status\":[\"sudan\"],\"export_settings\":{\"format\":\"json\",\"model\":\"modelX\"}}"
方案3:PowerShell环境直接传JSON
在curl命令前加停止解析符--%,再配合内部双引号转义即可:
curl.exe --% -k -H "Token:THisisarealtoken123" -H "Content-type:application/json" "https://api.deftesla.com/data_export" -X POST "{\"status\":[\"sudan\"],\"export_settings\":{\"format\":\"json\",\"model\":\"modelX\"}}"
内容的提问来源于stack exchange,提问作者user16666480
相关产品推荐
相关产品推荐

