【发布时间】:2018-06-25 02:03:09
【问题描述】:
使用 curl 进行 POST 调用时,我无法正确传递 JSON 数据。字符串在第一个空格/空白处被截断。
我的调用看起来像这样,我正在通过一个具有两个参数的 powershell 脚本执行。使用这些参数,我连接了用于调用的 JSON。
我输入例如854e-ae7686fbc75a 365作为参数
# usage: powershell -file send.ps1 [apitoken] [interval]
param (
[string]$apitoken = "",
[int]$startInterval = "365"
)
$AUTHORIZATION = $apitoken
$STARTDATE = (Get-Date).AddDays(-$startInterval)
$ENDDATE = (Get-Date)
$JSON = '{\"ApiToken\":\"' + $AUTHORIZATION + '\",' +
'\"StartDate\":\"' + $STARTDATE + '\",' +
'\"EndDate\":\"' + $ENDDATE + '\",' +
'\"Type\":\"SalesExport\"' +
'}'
$CURLEXE = '..\bin\curl.exe'
$CurlArgument = '-X', 'POST',
'-m', 7200,
'-H', '"Content-Type:application/json"',
'-d', $JSON,
'https://my.server/export/sales'
& $CURLEXE @CurlArgument
STARTDATE 将是当前日期减去 365 天。 ENDDATE 将是当前日期。
问题在于,只要 JSON 变量中有空格(或者可能是任何空格),curl 就会认为 JSON 已结束并说 JSON 未终止。如果我用单引号或双引号括住变量,则没有区别。
即使空格在两个 DateTime 变量之一内,也会出现问题!
如何正确格式化 JSON 以使其包含空格?
【问题讨论】:
-
我找到了一个部分解决方案,如果我确保 JSON 中没有空格并使用
(Get-Date).Date.ToString("yyyy-MM-dd")代码有效。但如果我将来需要时间字符串,这也行不通。
标签: json powershell curl post