gpt4 book ai didi

powershell - 如何使用PowerShell Invoke-RestMethod发送多部分/表单数据

转载 作者:行者123 更新时间:2023-12-03 12:48:35 24 4
gpt4 key购买 nike

我正在尝试通过Invoke-RestMethod在与-F开关curl相似的上下文中发送文件。

curl 示例

curl -F FileName=@"/path-to-file.name" "https://uri-to-post"

在powershell中,我已经尝试过类似的方法:
$uri = "https://uri-to-post"
$contentType = "multipart/form-data"
$body = @{
"FileName" = Get-Content($filePath) -Raw
}

Invoke-WebRequest -Uri $uri -Method Post -ContentType $contentType -Body $body
}

如果我检查 fiddler ,我会看到主体包含原始二进制数据,但返回200响应,表明未发送任何有效负载。

我也尝试过使用-InFile参数,但没有运气。

我已经看到了许多使用.net类的示例,但是试图通过较新的Powershell 3命令使其保持简单。

有人有做这项工作的指导或经验吗?

最佳答案

接受的答案不会发出multipart/form-data请求,而是发出一个application/x-www-form-urlencoded请求,将Content-Type header 强制为正文不包含的值。

使用PowerShell发送multipart/form-data格式的请求的一种方法是:

$ErrorActionPreference = 'Stop'

$fieldName = 'file'
$filePath = 'C:\Temp\test.pdf'
$url = 'http://posttestserver.com/post.php'

Try {
Add-Type -AssemblyName 'System.Net.Http'

$client = New-Object System.Net.Http.HttpClient
$content = New-Object System.Net.Http.MultipartFormDataContent
$fileStream = [System.IO.File]::OpenRead($filePath)
$fileName = [System.IO.Path]::GetFileName($filePath)
$fileContent = New-Object System.Net.Http.StreamContent($fileStream)
$content.Add($fileContent, $fieldName, $fileName)

$result = $client.PostAsync($url, $content).Result
$result.EnsureSuccessStatusCode()
}
Catch {
Write-Error $_
exit 1
}
Finally {
if ($client -ne $null) { $client.Dispose() }
if ($content -ne $null) { $content.Dispose() }
if ($fileStream -ne $null) { $fileStream.Dispose() }
if ($fileContent -ne $null) { $fileContent.Dispose() }
}

关于powershell - 如何使用PowerShell Invoke-RestMethod发送多部分/表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com