cURL设置Content-Type请求头不生效?问题求助
问题原因与解决方案
嗨,这个问题我太熟了——就是Windows CMD对引号的处理逻辑和类Unix终端不一样导致的!
你在CMD里用单引号(')包裹Header参数,但CMD根本不识别单引号,它会把单引号当成参数的一部分传给curl,结果就是curl完全没读到你指定的Content-Type: application/json头,只能 fallback 到默认的application/x-www-form-urlencoded类型发送请求,这就触发了服务器的415错误。
修正后的命令
把Header的单引号换成双引号(CMD只认双引号作为参数包裹符),同时如果你的JSON请求体里有双引号,记得用反斜杠(\)转义:
curl -v -X POST http://localhost:40071/api/Sale --header "Content-Type: application/json" -d "{\"key\":\"value\",\"anotherKey\":123}"
更省心的写法
如果你觉得转义JSON里的双引号太麻烦,可以把JSON内容单独存到一个文件里(比如叫request.json),然后用@文件名的方式传递请求体,这样既不用转义,可读性也更好:
curl -v -X POST http://localhost:40071/api/Sale --header "Content-Type: application/json" -d @request.json
只要把request.json放在当前CMD的工作目录下就行。
另外补充一句:curl在使用-d参数但没指定Content-Type时,默认就会用application/x-www-form-urlencoded,这就是你日志里看到这个类型的原因——因为你的Header参数根本没被正确解析~
内容的提问来源于stack exchange,提问作者user10133391




