在 PowerShell 中对捷克贸易许可登记册 (RŽP) 执行 XML-请求

Performing a XML-Request against Czech Trade Licensing Register (RŽP) in PowerShell

祝大家今天愉快。我需要创建一个 powershell 脚本,它将 xml 与 post 请求作为 multipart/form-data 发送并接收它。在 official site 上(仅在捷克语中可用)只有 html 形式的这个小代码:

<form name="frmdata" method="post" enctype="multipart/form-data" 
   action="http://www.rzp.cz/cgi-bin/aps_cacheWEB.sh">
      <input type="hidden" name="VSS_SERV" value="ZVWSBJXML">
      <input type="file" name="filename">
      <input type="submit" name="x" value="ODESLI">
</form>

您可以在 GitHub.

上找到相关信息

我有这个 XML 文件有问题:

<?xml version="1.0" encoding="ISO-8859-2"?> 
<VerejnyWebDotaz xmlns="urn:cz:isvs:rzp:schemas:VerejnaCast:v1" version="2.8"> 

   <Kriteria>
   <IdentifikacniCislo>27074358</IdentifikacniCislo>
   <PlatnostZaznamu>1</PlatnostZaznamu>
  </Kriteria>
 </VerejnyWebDotaz>

我在 powershell 中尝试了类似这样的自动化:

$url = "http://www.rzp.cz/cgi-bin/aps_cacheWEB.sh"

$MyXmlPath = "...\RZP.xml"
$fileBytes = [System.IO.File]::ReadAllBytes($MyXmlPath)
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$boundary = [System.Guid]::NewGuid().ToString()
$lineFeed = "`r`n"
$body = (
    "--$boundary",
    "Content-Disposition: form-data;
     name=`"VSS_SERV`"value=`"ZVWSBJXML`"",
    "--$boundary",    
    "Content-Disposition: form-data;
    name=`"filename`"; filename=`"RZP.xml`",
    Content-Type: text/xml; $fileEnc",
    "--$boundary$lineFeed"  
   ) -join $lineFeed

$nic =Invoke-WebRequest -Uri $url -Method 'Post' -Body $body 

但我只得到“Chyba”(错误)-1,这意味着该请求没有(有效)XML 问题。但是我的 XML 肯定是有效的,因为当我在上面的 html 表格中使用它时,它工作得很好。

有人知道吗?

对不起我的英语。

通过与

比较修复了您的代码
$url = "https://www.rzp.cz/cgi-bin/aps_cacheWEB.sh"

$MyXmlPath = "RZP.xml"
$fileEnc = Get-Content $MyXmlPath -RAW -Encoding UTF8
$boundary = [System.Guid]::NewGuid().ToString()
$body = (
    "--$boundary",
    "Content-Disposition: form-data; name=`"VSS_SERV`"",
    "Content-Type: text/plain",
    "",
    "ZVWSBJXML",
    "--$boundary",
    "Content-Disposition: form-data; name=`"filename`"; filename=`"RZP.xml`";",
    "",
    $fileEnc,
    "--$($boundary)--",
    ""  
   ) -join $lineFeed

$nic = Invoke-RestMethod -Uri $url -Method 'POST' -ContentType "multipart/form-data; boundary=$boundary" -UseBasicParsing -Body $body
$nic.OuterXml

结果看起来很有希望,因为它至少包含姓名和地址。