json - 将 cURL 转换为 PowerShell Invoke-WebRequest - JSON 数据表问题
问题描述
我有以下 PowerShell 脚本,它在 Windows 10 中使用 cURL 并且运行良好:
$Body = @{
'data' = @{
'CID' = 15;
'HID' = 37;
'Type' = "TYPE1";
'downloadOn' = "NEXT_CONTACT";
'AutomationEnabled' = "True";
}
}
$CurlArgument = '-s', '-X', 'PATCH',
'-H', 'Content-Type: application/json',
$URL,
'-H',
$AuthBearer,
'-d',
(($Body | ConvertTo-Json) -replace '"', '\"')
Write-Host "$Section cURL command took" ("{0:n1}" -f (Measure-Command {$UpdateResponse = & $CURLEXE @CurlArgument}).TotalSeconds) "Seconds" -ErrorAction SilentlyContinue
我不能使用 cURL,我需要在我的生产服务器上使用本机 Invoke-WebRequest。我需要将上面的转换成一个我已经完成的Invoke-WebRequest命令,如下:
$Body = @{
'data' = @{
'CID' = 15;
'HID' = 37;
'Type' = "TYPE1";
'downloadOn' = "NEXT_CONTACT";
'AutomationEnabled' = "True";
}
}
(($Body | ConvertTo-Json) -replace '"', '\"')
$Method = "PATCH"
$Header = @{"Accept" = "*/*" ; "Cache-Control" = "no-cache" ; "Host" = "myURL"; "accept-encoding" = "gzip,deflate"; "Authorization" = "Bearer $SessionToken" }
$ContentType = "application/json"
Write-Host "$Section Invoke-WebRequest command took" ("{0:n1}" -f (Measure-Command { $UpdateResponse = Invoke-WebRequest -Method $Method -Uri $URL -Header $Header -ContentType $ContentType -Body $Body }).TotalSeconds) "Seconds"
当我运行 Invoke-WebRequest 时,我收到以下错误,即 JSONObject 文本必须以 '{' 开头:
Invoke-WebRequest : {"status":"FAILURE","errors":...."message":{"5011":"A JSONObject text must begin with '{' at 1 [character 2 line 1]"}}]}
我的 $Body 看起来像这样,即它以 '{' 开头:
{
\"data\": {
\"downloadOn\": \"NEXT_CONTACT\",
\"HID\": 37,
\"AutomationEnabled\": \"True\",
\"CID\": 15,
\"Type\": \"TYPE1\"
}
}
我尝试使用和不使用“-replace '”','\“'”,从这篇文章“ cURL 到 PowerShell - --data 中的双哈希表?
查看我的 $Body JSON“对象”(?),我可以看到:
Name Value
---- -----
data {downloadOn, HID, AutomationEnabled, CID...}
查看我的价值,我可以看到它列出如下:
Name Value
---- -----
downloadOn NEXT_CONTACT
HID 37
AutomationEnabled True
CID 15
Type TYPE1
而不是发送-Body $Body,我想也许我应该只发送值,如下(也失败)和相同的消息。
-Body $Body.Values
昨晚我进行了大量搜索,但我不知道如何将其转换为成功的 Invoke-WebRequest,任何帮助将不胜感激。
解决方案
您将 $Body 作为哈希表发送,尝试将其转换为 JSON
$Body = $Body | ConvertTo-Json
如果您在上述行之前发送 $Body 并在之后再次发送到 echo 服务,您会看到不同之处
Invoke-RestMethod -Method 'POST' -Uri 'https://postman-echo.com/post' -ContentType 'application/json' -Body $Body
推荐阅读
- c++ - 在多个 cpp 文件中包含 fmt 库的问题
- shopware - 制作主题配置字段多语言?
- node.js - 带有打字稿的MongoDB聚合
- laravel - Laravel 8 子文件夹控制器
- elasticsearch - 长时间后如何在elasticsearch中重新索引旧索引
- android - 公共类 Adpter、onCreateViewHolder、MediaPlayer 的 NullPointerException
- android - 我们可以在android中使用hilt限制依赖的范围吗?
- sql-server - 使用数据库值在 razor 页面中绘制图形
- php - 内爆日期数组并更改日期格式
- xml - 使用基于其他段中出现的值填充 XSLT 中的变量