Преобразовать 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"