Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Stahování webové stránky v jazyce PowerShell
duben 29
Stahování webové stránky v jazyce PowerShell

Jak si v jazyce PowerShell stáhnout nějakou webovou stránku? A co když to vyžaduje ověření? Jak jednoduché!

A využití? Třeba kvůli SharePoint, nebo jiné webové aplikaci, kterou chcete udržet při životě. Pokud se jí přes noc nikdo nedotýká, tak se trošku utlumí, odstránku, co hůř, IIS ji může úplně restartovat. Tak co když ji budeme v nějakém cyklu trošku dráždit?

Používám to taky na wifinách, kde je nějaký příliš krátý timeout a odpojuje mě to (například v Microsoftu, v Akvárku).

Stáhnutí stránky pod účtem aktuálně přihlášeného uživatele

$webClient = New-Object System.Net.WebClient

$webClient.Headers.Add(
    "user-agent",
    "sevecek-keep-web-alive")

$webClient.Credentials = [System.Net.CredentialCache]::DefaultCredentials

[string] $html = $webClient.DownloadString("http://intranet")

Stáhnutí stránky pod konkrétním účtem zadaným jako login a heslo

$webClient = New-Object System.Net.WebClient

$webClient.Headers.Add(
    "user-agent",
    "sevecek-keep-web-alive")

$webClient.Credentials = New-Object System.Net.NetworkCredential ('ondrej', 'Pa$$w0rd', 'gps')
# Or use the following:  New-Object System.Net.NetworkCredential ('gps\ondrej', 'Pa$$w0rd')

[string] $html = $webClient.DownloadString("http://intranet")

A co když to musí valit přes proxy?

$webClient = New-Object System.Net.WebClient

$webClient.Headers.Add(
    "user-agent",
    "sevecek-keep-web-alive")

$webClient.Credentials = New-Object System.Net.NetworkCredential ('ondrej', 'Pa$$w0rd', 'gps')
# Or use the following:  New-Object System.Net.NetworkCredential ('gps\ondrej', 'Pa$$w0rd')

# The second parameter (boolean) is BypassOnLocal which I hope is self-descriptive
$webClient.Proxy = New-Object System.Net.WebProxy ('tmg1.gopas.virtual:8080', $true)

[string] $html = $webClient.DownloadString("http://intranet")

A co když i ta proxy taky vyžaduje ověření?

Pozná se vůbec požadavek ověření od proxy serveru od požadavku na ověření od cílového web serveru? Ano. Proxy posílá HTTP 407 Proxy Authentication Required, zatímco cílový web server vrací HTTP 401 Unauthorized.

$webClient = New-Object System.Net.WebClient

$webClient.Headers.Add(
    "user-agent",
    "sevecek-keep-web-alive")

$webClient.Credentials = New-Object System.Net.NetworkCredential ('ondrej', 'Pa$$w0rd', 'gps')

$webClient.Proxy = New-Object System.Net.WebProxy ('tmg1.gopas.virtual:8080', $true)
$webClient.Proxy.UseDefaultCredentials = $true
# Or assign the credentials the same way as with the WebClient itself:
# $webClient.Proxy.Credentials = New-Object System.Net.NetworkCredential ('proxy-user', 'Pa$$w0rd', 'gps')

[string] $html = $webClient.DownloadString("http://intranet")

Comments

Stažení souboru z Codeplexu

Zdravím,

A co kdybych chtěl pomocí PowerShellu v2 stáhnout soubor z například z Codeplexu. Codeplex zmiňuji záměrně, protože pokud chci stahovat soubor, není dohledatelný přímý odkaz na tento soubor, který chci stahovat.

V PowerShellu 3 mohu použít Invoke-WebRequest, který mi soubor stáhne. Ale v PowerShellu v2 se mi nepodařilo najít nějaké spolehlivé řešení a obešel jsem to tak, že mám puštěný powershell script v kontextu PS2 a když si chci stáhnout co potřebuji, vygeneruji si script na stažení, který spustím v kontextu PS3 a v něm si pustím Invoke-WebRequest.

Dškuji
Motorboy on 6.9.2014 17:50

Re: Stahování webové stránky v jazyce PowerShell

takto:

a) pusťte si IEčko
b) zmáčkněte F12, dole se vám objeví Developer Toolbar
c) záložka Network (nebo čudlík vlevo s wifi bedničkou)
d) čudlík Start capturing
e) menu panelu Tools – Clear entries on navigate – vypnout
nebo čudlík nahoře se stejným popiskem - vypnout
f) do URL prohlížeče hoďte to „lidské“ URL pro download: http://ventigrate.codeplex.com/downloads/get/261355 
g) dole v panelu vidíte, že se stáhne normální HTML stránka, která obsahuje .JS skript. Ten skript teprve startuje download.
h) URL toho downloadu uvidíte úplně dole jako poslední řádek
i) zkusil jsem to, a skutečné URL toho souboru je toto: http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=ventigrate&DownloadId=261355&FileTime=129556623735200000&Build=20928
j) tohle už by šlo rovnou stáhnout z toho System.Net.WebClient

problém je, že to URL, které vy máte v ruce, je normální HTML stránka s JavaScriptem a nikoliv ten skutečný download. A problém je, že byste musel tu stránku rozparsovat ručně a najít tam ten skutečný download link. Nebo prostě musíte vědět ten skutečný link, který zjistíte postupem uvedeným výše, pokud vám to stačí pro jeden jediný download.
ondass on 18.9.2014 10:46

Re: Stahování webové stránky v jazyce PowerShell

jedno z použití těchto skriptů na témata antihackingu je například zde: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=519
ondass on 27.8.2015 7:36

Re: Stahování webové stránky v jazyce PowerShell

doplnění, jak explicitně vypnout proxy na webclientovi (například když máte autodetekci a vůbec ji nechcete):

$webClient.Proxy = [System.Net.GlobalProxySelection]::GetEmptyWebProxy()

ondass on 6.7.2016 11:19

Add Comment

Sorry comments are disable due to the constant load of spam *


Omlouvám se, ale příval spamu nelze kontrolovat, takže mi prosím pošlete email, pokud máte nějaký dotaz, nebo připomínku.

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments