Powershell Invoke-WebRequest提交表单SAP

时间:2020-03-31 21:21:42

标签: powershell sap invoke-webrequest

我正在尝试编写一个脚本,使用以下URL检查公司显示器上的保修状态:http://143.101.250.86/scripts/wgate/zsvz3/!

我知道它看起来很黑,它是从http://warrantycheck.necdisplay.com重定向的,当您提交表单时,它似乎正在对其SAP实例运行查询。

我经常获得显示器型号和序列号列表(有时是100列),并且希望能够通过脚本运行它们,而不是手动键入所有内容。

当我运行此代码时:

$url = "http://143.101.250.86/scripts/wgate/zsvz3/!"  
$r = Invoke-WebRequest -Uri $url -SessionVariable sv
$Fields = @{"G_MATNR" = "P462";"G_SERNR" = "2X207961NW"}
$formSubmit = Invoke-WebRequest -Uri "http://143.101.250.86/scripts/wgate/zsvz3/!/scripts/wgate/zsvz32e6f78bc/~flN0YXRlPTMyNzUxLjAwMi4wMi4wMg==" -WebSession $sv -Method POST -Body $fields


Write-Host $formSubmit.ParsedHtml.body.innerHTML

响应页面告诉我

Your request did not contain a service name. Please provide a service name as part of the URL.
Example URL: http://.../scripts/wgate/CreateSO!

我可以识别出我的POST Uri包含某种会话ID,可以在此页面的javascript中找到该会话ID,但是我不确定如何提取该会话ID并将其用于POST命令。

我尝试在会话变量中找到它

$sv.Cookies.GetCookies($url)

没有运气。我无法在$ r.ParsedHtml中找到它,因为它没有解析为HTML。

我尝试使用

样板帮助代码
$form = $r.Forms[0]
$form.Fields["G_MATNR"] = "P462"
$form.Fields["G_SERNR"] = "2X207961NW"

$formSubmit = Invoke-WebRequest -Uri ($url + $form.Action) -WebSession $sv -Method POST 

但这不使用表单,而是封装在iFrame中,我认为这种方法可能会困扰我。

关于如何执行此操作或如何在POST方法中生成正确的“服务名称”的任何想法?

编辑:更新 javaScript代码确实包含一种形式:

<form id="inputForm" name="inputForm" action="/scripts/wgate/zsvz32e6f3fcc/~flN0YXRlPTI4NjY4LjAwMS4wMi4wMg==" method="post">

但是它包含在iFrame中,也许这就是为什么powershell不在$ r.Forms [0]中返回它的原因?

更新2 向Fiddler请求标头:

POST /scripts/wgate/zsvz32e6f5490/~flN0YXRlPTE4NTgzLjAwMS4wMi4wMg== HTTP/1.1
Host: 143.101.250.86
Connection: keep-alive
Content-Length: 110
Cache-Control: max-age=0
Origin: http://143.101.250.86
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://143.101.250.86/scripts/wgate/zsvz32e6f5490/~flN0YXRlPTMxNjI0LjAwMS4wMi4wMg==?~subframe=1&~use_session_protocol=1&~keeprfccontext=1&~webguidynprometric=1&~webguiuserareawidth=1900&~webguiuserareaheight=803
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: ~session=PNMITS2:DLSITS02:0000.010b.00cd16f9.dcba; ~http_content_charset=iso-8859-1

1 个答案:

答案 0 :(得分:0)

“服务名称”是您要访问的URL的最后一部分。期望在最后一个/和!之间。您可以从邮递员或任何其他测试应用程序中发布信息吗?否则,我将查看您是否可以修改URL。

相关问题