将 Curl 转换为 Invoke-RestMethod
Convert Curl to 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 到达登录页面,但从那里失败。
正文应为 JSON 格式,当您获取文件并添加 | ConvertFrom-Json
内容成为 PowerShell 对象时。
所以,您可以删除 | ConvertFrom-Json
,它应该可以工作:)
使用-InFile
上传文件。不要忘记设置内容类型。
为了易读性而包装(转义 EOL 在 PowerShell 中作为行继续,它看起来很有趣,因为 Whosebug 语法突出显示无法处理它):
Invoke-RestMethod `
-Method Post `
-Uri "$host/api/2.0/clusters/create"
-Headers @{
Authorization = "Bearer $token"
} `
-Infile my_file.json
-ContentType "application/json"
问题
我很难将 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 到达登录页面,但从那里失败。
正文应为 JSON 格式,当您获取文件并添加 | ConvertFrom-Json
内容成为 PowerShell 对象时。
所以,您可以删除 | ConvertFrom-Json
,它应该可以工作:)
使用-InFile
上传文件。不要忘记设置内容类型。
为了易读性而包装(转义 EOL 在 PowerShell 中作为行继续,它看起来很有趣,因为 Whosebug 语法突出显示无法处理它):
Invoke-RestMethod `
-Method Post `
-Uri "$host/api/2.0/clusters/create"
-Headers @{
Authorization = "Bearer $token"
} `
-Infile my_file.json
-ContentType "application/json"