Powershell 发布请求失败

问题描述 投票:0回答:1

我正在尝试将标准的curl请求转换为可以在powershell脚本中运行的东西。

这是持续有效的卷曲:

curl -X POST -F "file=@C:\your\file\location\Example.csv" -H "Authorization: Bearer [INSERT BEARER TOKEN]" https://example-api-or-endpoint.com

这是始终失败的 powershell:

$uri = "https://example-api-or-endpoint.com" $outputCsvPath = "C:\your\file\location\Example.csv" $headers = @{"Authorization" = "Bearer [BEARERTOKEN]"} Invoke-WebRequest -Uri $uri -Method Post -InFile $outputCsvPath -ContentType "multipart/form-data" -Headers $headers

预期结果:

{"file_id":"FILEID","message":"File sent successfully","status":"success"}

实际结果:

{"message":"No file part in the request","status":"error"}

我尝试使用 RestMethod,将 InFile 更改为 Body,确保文件路径正确并且文件存在,但我不断收到错误消息,指出请求中没有文件部分。

值得一提的是,我使用的 URL 是 Google Cloud Function 端点,因此不完全是一个 API,但我在详细信息中提到的 CURL 语句在 100% 的情况下有效,但它的 powershell 版本在 100% 的情况下失败.

对于一些其他上下文,POST 请求应该发送整个文件,而不是其内容。

powershell curl invoke-webrequest
1个回答
0
投票

Invoke-WebRequest 帮助主题中的

示例 6 显示了简化的 
multipart/form-data
提交,将 hashtable 传递给
-Form
参数,其条目的值为
[System.IO.FileInfo]
实例(通过
 获取) Get-Item
,例如:

因此:

$uri = "https://example-api-or-endpoint.com"
$outputCsvPath = "C:\your\file\location\Example.csv"
$headers = @{ "Authorization" = "Bearer [BEARERTOKEN]" } 

# Use the -Form parameter with a hashtable and add an entry that
# references the file to upload via Get-Item 
Invoke-WebRequest -Uri $uri -Method Post -Headers $headers -Form @{
  file = Get-Item -LiteralPath C:\your\file\location\Example.csv
}

注:

  • 通过这种简化的方法,您无法控制正在上传的文件的媒体类型;总是使用通用的

    application/octet-stream

  • 如果您需要更多控制,请参阅示例 5

© www.soinside.com 2019 - 2024. All rights reserved.