Преобразовать Curl в Invoke-RestMethod

Проблема

Мне сложно преобразовать вызов curl в вызов Powershell Invoke-RestMethod, поскольку Powershell не отображает наиболее информативные сообщения об ошибках (если они есть).

Вызов Curl (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 для страницы входа. На Ubuntu с Curl все работает отлично.

ПРИМЕЧАНИЕ
. Проблема заключалась в том, что PowerShell не может обрабатывать двойные -"/", как в "https://lalala.azuredatabricks.net//api/2.0/clusters/create".

Странно то, что Invoke-RestMethod попадает на страницу входа, но оттуда не работает.

2 ответа

Решение

Предполагается, что тело будет в формате JSON, когда вы берете файл и добавляете | ConvertFrom-Json содержимое становится объектом PowerShell.

Итак, вы можете удалить | ConvertFrom-Json и должно работать:)

Использовать -InFileчтобы загрузить файл. Не забудьте указать тип содержимого.

Обернут для удобочитаемости (экранирование EOL работает как продолжение строки в PowerShell, это выглядит забавно, потому что подсветка синтаксиса Stackru не справляется с этим):

Invoke-RestMethod `
    -Method Post `
    -Uri "$host/api/2.0/clusters/create"
    -Headers @{
        Authorization = "Bearer $token"
    } `
    -Infile my_file.json
    -ContentType "application/json"
Другие вопросы по тегам