1

问题

我很难将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进入登录页面,但从那里失败。

4

2 回答 2

2

用于-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"
于 2020-06-24T09:04:33.420 回答
1

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

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

于 2020-06-24T08:58:11.570 回答