Powershell Invoke-WebRequest отправить форму SAP - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать сценарий, который проверяет гарантийный статус на мониторах моей компании, используя этот 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 содержит какой-то идентификатор сеанса, который я могу найти в javascript для этой страницы, но я не уверен, как извлечь его и использовать в моей команде POST.

Я попытался найти его в переменной сеанса

$sv.Cookies.GetCookies($url)

Без удачи. Я не могу найти его в $ r.Parsed Html, так как он не анализируется как 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, что, я думаю, может сыграть на моих проблемах с этим методом.

Любые идеи о том, как это сделать или как я могу генерировать правильное 'Service Name' в моем методе POST?

EDIT: Update Код 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 голосов
/ 01 апреля 2020

«Имя службы» - это последняя часть URL, которую вы нажимаете. Он ожидает, что что-то будет между последним / и! Вы можете POST от почтальона или любого другого приложения для тестирования? В противном случае я бы посмотрел, можете ли вы изменить URL.

...