我一直在尝试(失败了几个小时)将此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"
}
}
一如既往,我们将不胜感激。
答案 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讲述了整个故事。