将工作邮递员formdata调用转换为PowerShell
我有一个正在工作的邮递员示例,它创建一个包并将一个PDF文件发送到web应用程序。然而,当我从Postman获取代码片段时,结果是400个错误请求,没有进一步的信息。导出python中的代码段也是如此,同样也是400个错误请求 Postman已翻译为PowerShell的确切代码:将工作邮递员formdata调用转换为PowerShell,powershell,postman,multipartform-data,Powershell,Postman,Multipartform Data,我有一个正在工作的邮递员示例,它创建一个包并将一个PDF文件发送到web应用程序。然而,当我从Postman获取代码片段时,结果是400个错误请求,没有进一步的信息。导出python中的代码段也是如此,同样也是400个错误请求 Postman已翻译为PowerShell的确切代码: $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add(&quo
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$headers.Add("Accept", "application/json; esl-api-version=11.0")
$headers.Add("Authorization", "Basic M1d*****************==")
$headers.Add("Cookie", "Path=/")
$multipartContent = [System.Net.Http.MultipartFormDataContent]::new()
$multipartFile = '/C:/temp/test.pdf'
$FileStream = [System.IO.FileStream]::new($multipartFile, [System.IO.FileMode]::Open)
$fileHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("form-data")
$fileHeader.Name = "file"
$fileHeader.FileName = "/C:/temp/test.pdf"
$fileContent = [System.Net.Http.StreamContent]::new($FileStream)
$fileContent.Headers.ContentDisposition = $fileHeader
$multipartContent.Add($fileContent)
$stringHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("form-data")
$stringHeader.Name = "payload"
$stringContent = [System.Net.Http.StringContent]::new("{`n`"roles`":[`n{`n`"id`":`"Signer1`",`n`"index`":`"0`",`n`"signers`":[`n{`n`"email`":`"b.moeskops@myemail.com`",`n`"firstName`":`"Bernard`",`n`"lastName`":`"Moeskops`"`n}`n]`n}`n],`n`"documents`":[`n{`n`"name`":`"test-document`",`n`"extract`": true,`n`"extractionTypes`": [`n`"TEXT_TAGS`"`n]`n}`n],`n`"name`":`"Test transactie`",`n`"type`":`"PACKAGE`",`n`"language`":`"nl`",`n`"emailMessage`":`"Package via Postman`",`n`"data`": {`n`"senderVisible`": false,`n`"origin`": `"postman`"`n},`n`"settings`":{`n`"ceremony`":{`n`"inPerson`":false`n}`n},`n`"status`":`"SENT`"`n}")
$stringContent.Headers.ContentDisposition = $stringHeader
$multipartContent.Add($stringContent)
$body = $multipartContent
$response = Invoke-RestMethod 'https://my.validsign.nl/api/packages' -Method 'POST' -Headers $headers -Body $body -MaximumRedirection 0
$response | ConvertTo-Json
我将路径更改为有效的Windows路径。我还为stringcontent创建了一个可读对象:
$payloadBody = @{
roles = @(
@{
id = "Signer1"
index = 0
signers = @(
@{
email = "b.moeskops@myemail.com"
firstName = "Bernard"
lastName = "Moeskops"
}
)
}
)
documents = @(
@{
name = "test-document"
extract = $true
extractionTypes = @(
"TEXT_TAGS"
)
}
)
name = "Test transactie"
type = "PACKAGE"
language = "nl"
emailMessage = "Package via Postman"
data = @{
senderVisible = $false
origin = "postman"
}
settings = @{
ceremony = @{
inPerson = $false
}
}
status = "SENT"
} | ConvertTo-Json
$stringContent = [System.Net.Http.StringContent]::new($payloadBody)
通过PowerShell查看多部分formdata请求,我确实发现它通常不像Postman输出代码那样执行。例如,它的构建方式如下:
$filePath = "C:\Temp\random.txt"
$fileBytes = [System.IO.File]::ReadAllBytes($filePath);
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$boundary = [System.Guid]::NewGuid().ToString();
$LF = "`r`n";
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"random.txt`"",
"Content-Type: tekst/plain$LF",
$fileEnc,
"--$boundary--$LF"
) -join $LF
然后使用边界标题发布上述内容
我想知道是否有其他人有过类似的情况,可以给我提供建议或给我指出正确的方向,或者是一种更好地将邮递员与PowerShell进行比较的方法。非常感谢您的帮助
编辑
我安装了PowerShell 7,请求正在运行。只是为了添加一些上下文,PowerShell的所有json部分都在v7中得到了升级,还有许多web请求/rest内容。我推荐它,尤其是现在涉及Web服务的任何东西。