PowerShell 获取正文请求
PowerShell Get request with body
我正在尝试 this api endpoint。
我可以在python中调用这个,没问题,就像下面的
get_model_versions={
"filter":"name='model_name'",
"order_by":["version DESC"],
"max_results":1
}
init_get = requests.get("baseurl/api/2.0/preview/mlflow/model-versions/search",headers=header_read,json=get_model_versions)
但是,我似乎无法找到让它在 Powershell 中工作的方法。
首先 powershell "get" Invoke-RestMethod 不接受正文
然后我似乎找不到将它作为查询字符串附加到 Powershell 中的方法。
我已经尝试过(在其他失败的尝试中),以下
$get_model_versions=([PSCustomObject]@{
filter = "name=`'model_name`'"
order_by = @("version desc")
} | ConvertTo-Json)
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get -Body $get_model_versions
但这给了我一个错误,body 不能与 get 方法一起使用
尝试将其附加为查询字符串(就像我什至只保留名称过滤器并删除其他过滤器一样),也失败了
$searchuri= "baseurl/api/2.0/preview/mlflow/model-versions/search?filter=""name==model_name"""
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get
失败
{"error_code":"INVALID_PARAMETER_VALUE","message":"Unsupported filter query : `\"name==model_name\"`. Unsupported operator."}
如何在 Powershell 中模仿我在 Python 中所做的相同行为?
编辑 1:我确实尝试对查询参数进行编码(也许我做错了),但这是我失败的尝试的样子
$encodedvalue = [System.Web.HttpUtility]::UrlEncode("`"name='model_name'`"")
$searchuri= "baseurl/api/2.0/preview/mlflow/model-versions/search?filter=$encodedvalue"
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get
但这也给了我
"Unsupported filter query : `\"name='model_name'\"`. Unsupported operator."
我也在 Postman 中通过传递原始 json 正文(与 python 相同)成功地进行了尝试,当我在 Postman 中查看生成的 PowerShell 代码时,我看到了这个
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer token")
$headers.Add("Content-Type", "application/json")
$body = "{
`n `"filter`":`"name='model_name'`",
`n `"order_by`":[`"version DESC`"],
`n `"max_results`":1
`n}
`n"
$response = Invoke-RestMethod 'baseurl/api/2.0/preview/mlflow/model-versions/search' -Method 'GET' -Headers $headers -Body $body
$response | ConvertTo-Json
但这当然会失败(如果您在 powershell 编辑器中复制它并 运行 它
Invoke-RestMethod : Cannot send a content-body with this verb-type
折腾了半天终于找到答案了!
症结在文档中here。
特别是这一段
因此,如果您想为 powershell 中的“get”方法传递主体,请将其作为哈希表传递。
所以,最后的答案是
$query=@{"filter"="name='model_name'";"order_by"=@("version DESC"); "max_results"=1};
$searchuri="baseurl/api/2.0/preview/mlflow/model-versions/search"
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get -Body $query
希望这对寻找类似内容的人有所帮助。
我正在尝试 this api endpoint。 我可以在python中调用这个,没问题,就像下面的
get_model_versions={
"filter":"name='model_name'",
"order_by":["version DESC"],
"max_results":1
}
init_get = requests.get("baseurl/api/2.0/preview/mlflow/model-versions/search",headers=header_read,json=get_model_versions)
但是,我似乎无法找到让它在 Powershell 中工作的方法。
首先 powershell "get" Invoke-RestMethod 不接受正文
然后我似乎找不到将它作为查询字符串附加到 Powershell 中的方法。
我已经尝试过(在其他失败的尝试中),以下
$get_model_versions=([PSCustomObject]@{
filter = "name=`'model_name`'"
order_by = @("version desc")
} | ConvertTo-Json)
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get -Body $get_model_versions
但这给了我一个错误,body 不能与 get 方法一起使用
尝试将其附加为查询字符串(就像我什至只保留名称过滤器并删除其他过滤器一样),也失败了
$searchuri= "baseurl/api/2.0/preview/mlflow/model-versions/search?filter=""name==model_name"""
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get
失败
{"error_code":"INVALID_PARAMETER_VALUE","message":"Unsupported filter query : `\"name==model_name\"`. Unsupported operator."}
如何在 Powershell 中模仿我在 Python 中所做的相同行为?
编辑 1:我确实尝试对查询参数进行编码(也许我做错了),但这是我失败的尝试的样子
$encodedvalue = [System.Web.HttpUtility]::UrlEncode("`"name='model_name'`"")
$searchuri= "baseurl/api/2.0/preview/mlflow/model-versions/search?filter=$encodedvalue"
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get
但这也给了我
"Unsupported filter query : `\"name='model_name'\"`. Unsupported operator."
我也在 Postman 中通过传递原始 json 正文(与 python 相同)成功地进行了尝试,当我在 Postman 中查看生成的 PowerShell 代码时,我看到了这个
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer token")
$headers.Add("Content-Type", "application/json")
$body = "{
`n `"filter`":`"name='model_name'`",
`n `"order_by`":[`"version DESC`"],
`n `"max_results`":1
`n}
`n"
$response = Invoke-RestMethod 'baseurl/api/2.0/preview/mlflow/model-versions/search' -Method 'GET' -Headers $headers -Body $body
$response | ConvertTo-Json
但这当然会失败(如果您在 powershell 编辑器中复制它并 运行 它
Invoke-RestMethod : Cannot send a content-body with this verb-type
折腾了半天终于找到答案了!
症结在文档中here。 特别是这一段
因此,如果您想为 powershell 中的“get”方法传递主体,请将其作为哈希表传递。
所以,最后的答案是
$query=@{"filter"="name='model_name'";"order_by"=@("version DESC"); "max_results"=1};
$searchuri="baseurl/api/2.0/preview/mlflow/model-versions/search"
$resp=Invoke-RestMethod -Uri $searchuri -Headers $auth -Method Get -Body $query
希望这对寻找类似内容的人有所帮助。