0

我正在尝试使用以下 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 中找到它,但我不确定如何提取它并在我的 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 来自提琴手的请求标头:

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
4

1 回答 1

0

“服务名称”是您点击的 URL 的最后一部分。它期望在最后一个 / 和 ! 之间有一些东西。您可以从邮递员或任何其他测试应用程序发布吗?否则我会看看你是否可以修改 URL。

于 2020-03-31T21:30:19.413 回答