Как я могу загрузить папку с веб-сервера с аутентификацией? - PullRequest
0 голосов
/ 05 августа 2020

Мне нужен сценарий, который загружает определенную папку и все ее подпапки + файлы на мой p c с веб-сервера. Это должно быть в PowerShell. Я немного поискал и нашел это:

Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip

Я получаю эту ошибку, когда пытаюсь запустить ее. Но я не могу понять, как передать с ним имя пользователя и пароль. Если кто-нибудь может мне помочь, я буду очень признателен! Также как я могу указать папку, в которой он должен быть сохранен? Заранее спасибо

ошибка

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Продолжая мой комментарий.

Я задаю этот вопрос, потому что некоторые сайты требуют, чтобы вы указали c в представлении учетных данных, а не всего лишь один кусок материала. Например:

$credentials = Get-Credential

$webServerUrl               = 'http://SomeWebSite'
$r                          = Invoke-WebRequest $webServerUrl -SessionVariable my_session
$form                       = $r.Forms[0]
$form.fields['Username']    = $credentials.GetNetworkCredential().UserName
$form.fields['Password']    = $credentials.GetNetworkCredential().Password

$InvokeWebRequestSplat = @{
    Uri        = $($webServerUrl + $form.Action) 
    WebSession = $my_session 
    Method     = 'GET '
    Body       = $form.Fields
}
$r = Invoke-WebRequest @InvokeWebRequestSplat

Обновление

Продолжение комментария. Здесь используется IE с PowerShell для автоматизации сайта.

# Scrape the site to find form data
$url = 'https://pwpush.com'
($FormElements = Invoke-WebRequest -Uri $url -SessionVariable fe)  
($Form = $FormElements.Forms[0]) | Format-List -Force
$Form | Get-Member
$Form.Fields

# Use the info on the site
$IE = New-Object -ComObject "InternetExplorer.Application"

$FormElementsequestURI = "https://pwpush.com"
$Password = "password_payload"
$SubmitButton = "submit"

$IE.Visible = $true
$IE.Silent = $true
$IE.Navigate($FormElementsequestURI)
While ($IE.Busy) {
    Start-Sleep -Milliseconds 100
}

$Doc = $IE.Document
$Doc.getElementsByTagName("input") | ForEach-Object {
    if ($_.id -ne $null){
        if ($_.id.contains($SubmitButton)) {$SubmitButton = $_}
        if ($_.id.contains($Password)) {$Password = $_}
    }
}

$Password.value = "1234"
$SubmitButton.click()

Invoke-WebRequest - это версия curl для Powershell. Его псевдоним даже называется curl.

Итак, в случае использования IVR все, что вам действительно нужно, чтобы сделать что-то вроде примеров Facebook и Linkedin:

$cred  = Get-Credential
$login = Invoke-WebRequest 'facebook.com/login.php' -SessionVariable 'fb'
$login.Forms[0].Fields.email = $cred.UserName
$login.Forms[0].Fields.pass = $cred.GetNetworkCredential().Password
$mainPage = Invoke-WebRequest $login.Forms[0].Action -WebSession $fb -Body $login -Method Post 

$cred = Get-Credential
$login = Invoke-WebRequest 'https://www.linkedin.com/uas/login?goback=&trk=hb_signin' -SessionVariable 'li'
$login.Forms[0].Fields.email = $cred.UserName
$login.Forms[0].Fields.pass = $cred.GetNetworkCredential().Password
$mainPage = Invoke-WebRequest $login.Forms[0].Action -WebSession $LI -Body $login -Method Post 

Тем не менее, обратите внимание, что я на Страница входа в FB / LI, и мне нужно знать, что она существует, прежде чем пытаться это сделать. Обратите внимание, что это старый код, который я не использовал очень давно, и у меня нет учетной записи FB. Я передал это тому, кто это сделал.

0 голосов
/ 05 августа 2020
$cred = Get-Credential
Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip -Credential $cred
...