在 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
结果看起来很有希望,因为它至少包含姓名和地址。
祝大家今天愉快。我需要创建一个 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
结果看起来很有希望,因为它至少包含姓名和地址。