Windows下cURL POST CSV字符串:PowerShell请求异常排查
排查PowerShell中cURL POST CSV字符串格式异常的问题
在Windows环境下,分别用PowerShell(cURL版本8.0.1)和Git Bash(cURL版本7.80)向同一API POST CSV字符串,Python测试请求正常,但PowerShell请求时API提示缺少LATITUDE列,Git Bash请求则能正常运行。
命令对比
PowerShell命令
C:\Windows\System32\curl.exe -k "https://website.com" -X POST -H "Content-Type: application/octet-stream" --data-raw $"LATITUDE,LONGITUDE\n53.3737131,-1.4704939\n53.3742428,-1.4677477\n53.3745646,-1.467576\n53.3758092,-1.4665675\n"
Git Bash命令
$ curl -k 'https://website.com' -X POST -H 'Content-Type: application/octet-stream' --data-raw $'LATITUDE,LONGITUDE\n53.3737131,-1.4704939\n53.3742428,-1.4677477\n53.3745646,-1.467576\n53.3758092,-1.4665675\n'
问题根源
PowerShell里的$"..."双引号扩展语法不会把\n解析为换行符,而是将其作为字面量\n发送给API。而Git Bash的$'...'是ANSI-C引号语法,会自动把\n转换成实际的换行符。API收到PowerShell发送的内容时,所有数据挤在一行,格式变成LATITUDE,LONGITUDEN53.3737131,-1.4704939N...,自然识别不出LATITUDE列。
解决办法
方案1:替换为PowerShell原生换行符`n
把字符串里的\n换成PowerShell支持的换行符`n:
C:\Windows\System32\curl.exe -k "https://website.com" -X POST -H "Content-Type: application/octet-stream" --data-raw "LATITUDE,LONGITUDE`n53.3737131,-1.4704939`n53.3742428,-1.4677477`n53.3745646,-1.467576`n53.3758092,-1.4665675`n"
方案2:用Here-String构造CSV内容
用PowerShell的Here-String直接写出带真实换行的CSV内容,彻底避免转义问题:
$csvContent = @" LATITUDE,LONGITUDE 53.3737131,-1.4704939 53.3742428,-1.4677477 53.3745646,-1.467576 53.3758092,-1.4665675 "@ C:\Windows\System32\curl.exe -k "https://website.com" -X POST -H "Content-Type: application/octet-stream" --data-raw $csvContent
方案3:通过cmd执行curl(可选)
如果不想调整PowerShell的字符串语法,也可以调用cmd来执行curl,利用cmd的转义规则:
cmd /c 'curl.exe -k "https://website.com" -X POST -H "Content-Type: application/octet-stream" --data-raw "LATITUDE,LONGITUDE\n53.3737131,-1.4704939\n53.3742428,-1.4677477\n53.3745646,-1.467576\n53.3758092,-1.4665675\n"'
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

