cURL到PowerShell---data中的双哈希表?

时间:2018-11-22 02:29:58

标签: powershell curl

我一直在尝试(失败了几个小时)将此cURL脚本转换为PowerShell:

curl -X POST \
  https://example.net \
  -H 'Authorization: Bearer 1234567890' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "data": {
        "MID": 33,
        "DID": "66666666",
        "CID": 10002,
        "status": "ACTIVE",
        "HID": "11"
    }
}'

我的PowerShell脚本看起来像这样-我怀疑这与我在$ Body中创建的双哈希表有关,但是我真的很茫然。:

..脚本为简单起见被剪掉

$Body =   @{
    'data'= @{
      'MID'= 33;
      'DID'= "66666666";
      'CID'=10002;
      'status'="ACTIVE";
      'HID'= "11"
    }
}
$CurlArgument = '-X', 'POST',
                'https://example.net',
                '-H', 'Authorization: Bearer 1234567890',
                '-H', 'Content-Type: application/json',
                '-d', 
                $Body
$CURLEXE = 'C:\Windows\System32\curl.exe'
& $CURLEXE @CurlArgument

执行时,我收到以下错误消息:

..."message":"Access not allowed","details":{"5011":"A JSONObject text must begin with '{' at 1 [character 2 line 1]"}}]}

我尝试在$ Body之后添加:

| ConvertTo-Json

但是那给了我这个错误:

Unexpected character ('d' (code 100)): was expecting double-quote to start field name

我的$ CurlArgument变量如下所示(与第一个cURL脚本相同):

-X
POST
https://example.net
-H
Authorization: Bearer 1234567890
-H
Content-Type: application/json
-d
{
    "data":  {
                 "CID":  10002,
                 "MID":  33,
                 "HID":  "11",
                 "DID":  "66666666",
                 "status":  "ACTIVE"
             }
}

一如既往,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

  • 您的$Body变量包含一个hashtable (@{ ... }),因此您必须使用ConvertTo-Json将其显式转换为JSON。

  • 此外,由于您正在调用外部程序,因此必须转义"字符。在JSON字符串中为\" [1]

$CurlArgument = '-X', 'POST',
                'https://example.net',
                '-H', 'Authorization: Bearer 1234567890',
                '-H', 'Content-Type: application/json',
                '-d', 
                (($Body | ConvertTo-Json) -replace '"', '\"')

[1]不幸的是,这个额外的转义要求是非常不幸的,但是到目前为止,为了向后兼容,它一直保留着。  This GitHub docs issue讲述了整个故事。