将工作邮递员formdata调用转换为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

我有一个正在工作的邮递员示例,它创建一个包并将一个PDF文件发送到web应用程序。然而,当我从Postman获取代码片段时,结果是400个错误请求,没有进一步的信息。导出python中的代码段也是如此,同样也是400个错误请求

Postman已翻译为PowerShell的确切代码:

$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服务的任何东西。