PowerShell для загрузки файла с динамическим размером по косвенной ссылке php (с помощью Invoke-WebRequest или COM-объекта) - PullRequest
0 голосов
/ 09 января 2019

Я работаю над созданием сценария для автоматической загрузки файла журнала из приложения.

Мне удалось обработать логин с помощью Invoke-WebRequest, но я застрял в загрузке. Ссылка для загрузки журнала предоставляется устройством на веб-странице: https://some.thing.com/common/download_logs.php

Если я нажму на ссылку, будет загружен файл с таким же именем (kbox_logs.tgz). Но я не могу понять, как это сделать с помощью Invoke-WebRequest.

Когда я сделаю что-то вроде ниже, основанное на WireShark, я перейду обратно на страницу входа (welcome.php) и перенаправлю на главную страницу (summary.php).

Invoke-WebRequest -uri ("https://some.thing.com/adminui/settings_support.php") -WebSession $ms -Method POST

Я сравнил пакет между прямым доступом к download.php (после входа в систему) и навигацией по сайту. Единственная разница в заголовке HTTP - это атрибут referer. Поэтому я создаю заголовок вручную, как показано ниже (информация о cookie-файлах из переменной сеанса, поэтому они действительны), и я получил другой результат: я получил страницу входа.

Name                           Value
----                           -----
User-Agent                     Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
Host                           some.thing.com
cookie                         kboxid=97d0e93e002f4846ef9211d013f4b261; KACE_CSRF_TOKEN=aad3f8c254d2f25bd24e35c51d654541822080da825d6353937a7fe294216089689cc68480299b657f4fb1e9be77ac711a658a96e2df50ffc5e242b94bd9baf4
Accept-Encoding                gzip, deflate
Referer                        http://some.thing.com/adminui/settings_support.php
accept                         text/html, application/xhtml+xml, image/jxr, */*
Accept-Language                en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3

Не уверен, правильно ли я понял заголовок.

==============================

Я также попробовал подход к объектам COM. Передо мной два последних шага:

1, Нажмите на ссылку для скачивания (глупый я, я могу только перемещаться, не могу загрузить. Сообщается, что метод Click () не существует. Способ, который я использовал на странице входа, здесь не работает.)

2, сохраните файл (я хочу запустить все это в фоновом режиме, поэтому отправка горячей клавиши 'S' не очень идеальна).

Вот код:

$username ="user"
$password ='pass'

$ie = new-object -ComObject "InternetExplorer.Application"

$init_url = "http://some.thing.com/adminui/welcome.php"
$ie.visible = $true
$ie.silent = $true
$ie.navigate($init_url)

while ($ie.busy -eq $true) {start-sleep 1}

$textbox_name = $ie.Document.getElementsBytagName("INPUT")|where {$_.name -eq 'LOGIN_name'}
$textbox_password = $ie.Document.getElementsBytagName("INPUT")|where {$_.name -eq 'LOGIN_PASSWORD'}
$button_login = $ie.Document.getElementsBytagName("BUTTON")

$textbox_name.value = $username
$textbox_password.value = $password
$button_login.item().click()

$setting_url = "http://some.thing.com/adminui/settings_control_panel.php"
$ie.navigate($setting_url)
while ($ie.busy -eq $true) {start-sleep 1}
$support_url = "http://some.thing.com/adminui/settings_support.php"
$ie.navigate($support_url)
while ($ie.busy -eq $true) {start-sleep 1}

$ie.document.getElementsByTagName("a")|where {$_.innertext -eq 'Retrieve appliance activity logs'}.item.click()
enter code here

1 Ответ

0 голосов
/ 10 января 2019

Давайте начнем с рассмотрения форм и методов на странице:

(Invoke-WebRequest -Uri "https://some.thing.com/adminui/settings_support.php").Forms

Надеемся, это даст вам некоторую информацию о действии download_logs.

Можете ли вы найти прямой URL-адрес файла, который вы пытаетесь загрузить? Возможно, тогда вы сможете указать Invoke-WebRequest на файл и указать путь -OutFile. Может быть, вы можете найти это через «HTML-представление верхнего уровня»?

Если вы знаете, какой заголовок вам нужен, попробуйте следующее:

$headers = @{"name"="value"}  
$uri = "https://some.thing.com/adminui/settings_support.php"
$outpath = "$PSScriptRoot\kbox_logs.tgz"

Invoke-WebRequest -Headers $headers -Uri $uri -Method POST -OutFile $outpath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...