【问题标题】:Convert Curl to Invoke-RestMethod将 Curl 转换为 Invoke-RestMethod
【发布时间】:2020-10-14 11:26:49
【问题描述】:

问题

我很难将 curl 调用转换为 Powershell Invoke-RestMethod 调用,因为 Powershell 并没有真正提供最具信息性的错误消息(如果有的话) .

卷曲调用(Ubuntu)

token = "djsakldsakldjaslda"
host = "https://lalala.azuredatabricks.net/"
curl -X POST -H "Authorization: Bearer $(token)" $(host)/api/2.0/clusters/create -d $(cat my_file.json)

Invoke-RestMethod 调用 (Powershell)

$token= "djsakldsakldjaslda"
$host = "https://lalala.azuredatabricks.net/"
Invoke-RestMethod -Method Post -Uri $host/api/2.0/clusters/create -Headers @{"Authorization" = "Bearer " + $token} -Body $(get-content my_file.json -raw | ConvertFrom-Json)

我有各种格式的正文,但无论我发送什么,我都会返回一些用于登录页面的 HTML。在带有 Curl 的 Ubuntu 上一切正常。

注意:
问题似乎是 PowerShell 无法处理双“/”,如“https://lalala.azuredatabricks.net//api/2.0/clusters/create”。

奇怪的是 Invoke-RestMethod 到达登录页面,但从那里失败。

【问题讨论】:

  • 尝试在ConvertFrom-Json之后添加ConvertTo-Json = $(get-content my_file.json -raw | ConvertFrom-Json | ConvertTo-Json)
  • 大声笑,这似乎有效。 OMG,为什么我需要使用这个可怕的工具:P
  • 我发现了错误,似乎与Curl不同,PowerShell方法不接受lalala.azuredatabricks.net//api/2.0/clusters/create中的“//”。奇怪的是它没有出错,但确实到达了站点...
  • 查看我的答案以获得解释,您也可以尝试同时删除 ` | ConvertFrom-Json | ConvertTo-Json` 也许它会工作。检查它:)
  • @ShaykiAbramczyk 嗯?当文件已经是 JSON,并且 OP 调用 ConvertFrom-JSON,但 API 需要 JSON,则解决方案不再调用 ConvertTo-JSON,解决方案是删除 ConvertFrom-JSON。

标签: json powershell curl post invoke-restmethod


【解决方案1】:

使用-InFile 上传文件。不要忘记设置内容类型。

为易读性包装(转义 EOL 在 PowerShell 中作为行延续,看起来很有趣,因为 StackOverflow 语法高亮无法处理它):

Invoke-RestMethod `
    -Method Post `
    -Uri "$host/api/2.0/clusters/create"
    -Headers @{
        Authorization = "Bearer $token"
    } `
    -Infile my_file.json
    -ContentType "application/json"

【讨论】:

    【解决方案2】:

    正文应为 JSON 格式,当您获取文件并添加 | ConvertFrom-Json 时,内容将变为 PowerShell 对象。

    所以,您可以删除| ConvertFrom-Json,它应该可以工作:)

    【讨论】:

    • 感谢您的回答。我最终没有使用 ConvertFrom-Json 和 ConvertTo-Json,因为真正的问题是 URL 中多余的“/”。如果您在答案中输入,我会接受:)
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2021-03-01
    • 2021-03-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2020-02-28
    相关资源
    最近更新 更多