Я пытаюсь получить некоторую информацию на локальной веб-странице, для доступа к которой требуется логин.
Я могу бежать
$response = Invoke-WebRequest "http://web.com/admin/launch?script=rh&template=dashboard" -SessionVariable rb -UserAgent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
$response
содержит правильную информацию, включая одну форму под названием login_form
, которую мне нужно использовать.
Тогда я пишу:
$response.Forms[0].Fields.user_id = 'admin'
$response.Forms[0].Fields.password= 'pass'
$response.Forms[0].Fields
Key Value
--- -----
d_user_id user_id
t_user_id string
c_user_id string
e_user_id true
user_id admin
password pass
Я ожидаю, что следующая команда вернет данные страницы, на которую я перенаправлен после входа в систему.
Invoke-WebRequest $('http://web.com/admin/' + $response.Forms[0].Action) -WebSession $rb -Body $response.Forms[0].Fields -Method POST -contentType "application/x-www-form-urlencoded"
Однако это просто возвращает предыдущую страницу, включая объект login_form
. Он идентичен $response
, хотя запрос кажется совершенно другим.
Я думаю, что эта проблема возникает из-за того же URL-адреса, используемого для каждой страницы, с разными строковыми параметрами запроса (например, script=rh&template=login&action=login
), возвращающими разные страницы. Однако я включаю эти строки в свой параметр -URI
в форме строки или свойства Action
. Поэтому я не уверен, какой другой метод я бы использовал, чтобы вернуть правильную страницу, если мой запрос POST вообще работает.
Я полностью застрял здесь с отсутствием какой-либо ошибки для отработки. Я не думаю, что допустил ошибку с запросом, так как провел много времени, настраивая параметры (другой синтаксис для определения полей и т. Д.), Что не имело никакого значения.
Файл Chrome HAR: Загрузить с Google Диска