PowerShell verzia 3.0 predstavuje možnosť priameho prístupu a práce s webovými stránkami HTML na internete. Na tento účel bol vyvinutý špeciálny cmdlet. vyvolanie WebRequest. Táto rutina vám umožňuje implementovať mnoho scenárov: od možnosti sťahovať / odovzdávať súbor z / na ľubovoľnú webovú stránku cez HTTP / HTTPS / FTP, končiac možnosťou analyzovať stránky HTML, monitorovať stav webových serverov, vyplňovať a odosielať webové formuláre. Nové cmdlet vo všeobecnosti poskytuje všetky potrebné metódy na navigáciu v strome DOM dokumentu HTML. V tomto článku sa pozrieme na niektoré základné príklady práce s cmdletom PowerShell Invoke-WebRequest..
obsah:
- Používanie Cmdlet Invoke-WebRequest
- Získame zoznam všetkých HTML odkazov na stránke
- Analýza stránok HTML pomocou Powershell
- Ako sťahovať súbor cez HTTP pomocou PowerShell
- Powershell vyplňovanie a odosielanie webových formulárov
- Nevýhody rutiny Invoke-WebRequest
Používanie Cmdlet Invoke-WebRequest
cmdlet vyvolať-WebRequest (alias wget) môže odosielať a prijímať požiadavky HTTP, HTTPS a FTP, spracovávať odpoveď vrátenú serverom. Odpoveď je zbierka formulárov, odkazov, obrázkov a ďalších dôležitých prvkov dokumentu HTML.
Vyskúšajte nasledujúci príkaz:
Invoke-WebRequest -Uri "http://winitpro.ru"
Ako vidíte, vrátená odpoveď nie je pre HTML jednoduchý kód HTML. Uvidíte rôzne vlastnosti webového dokumentu. Rutina Invoke-WebRequest, rovnako ako väčšina ostatných rutín PowerShell, pracuje s objektmi. Invoke-WebRequest vráti objekt typu HtmlWebResponseObject. Pozrime sa na všetky vlastnosti tohto objektu:
$ WebResponseObj = Invoke-WebRequest -Uri "http://winitpro.ru"
$ WebResponseObj | Get-Člen
Ak chcete získať surový kód HTML webovej stránky obsiahnutej v tomto objekte, vykonajte:
$ WebResponseObj.content
Môžete vrátiť kód HTML spolu s hlavičkami HTTP vrátenými webovým serverom:
$ WebResponseObj.rawcontent
Môžete skontrolovať iba kód odozvy webového servera a hlavičky HTTP stránky HTML:
$ WebResponseObj.Headers
Ako vidíte, webový server vrátil odpoveď 200, tj požiadavka bola úspešná a webový server je prístupný a funguje správne.
Získame zoznam všetkých HTML odkazov na stránke
Obraciame sa na hlavnú stránku našej stránky a získame zoznam odkazov na nej dostupných:$ SiteAdress = "http://winitpro.ru"
$ HttpContent = Invoke-WebRequest -URI $ SiteAdress
$ HttpContent.Links | Foreach $ _. Href
Ak chcete získať samotný text odkazu (obsiahnutý v prvku InnerText), môžete použiť túto konštrukciu:
$ HttpContent.Links | fl innerText, href
Môžete vybrať iba odkazy s konkrétnou triedou CSS:
$ HttpContent.Links | Where-Object $ _. Trieda-ekv. "Čísla stránok" | fl innerText, href
Alebo konkrétny text v adrese URL:
$ HttpContent.Links | Where-Object $ _. Href-like "* exchange *" | | fl innerText, href
Analýza stránok HTML pomocou Powershell
Rutina Invoke-WebRequest vám umožňuje rýchlo a pohodlne analyzovať obsah ľubovoľných webových stránok. Pri spracovaní stránky HTML z jej obsahu sa vytvárajú kolekcie odkazov (odkazov), webových formulárov (formulárov), obrázkov (obrázkov), skriptov (skriptov) atď..
Použitím Powershell získame obsah hlavnej stránky našej stránky:
$ Img = Invoke-WebRequest "https://winitpro.ru/"
Potom uvádzame všetky obrázky na tejto stránke:
$ Img.Images
Vytvoríme zbierku úplných ciest URL pre použité obrázky:
$ images = $ Img.Images | vyberte src
Inicializujte novú inštanciu triedy WebClient:
$ wc = New-Object System.Net.WebClient
A stiahnite všetky obrázky zo stránky (s pôvodnými názvami) do adresára c: \ tools \:
$ obrázky | foreach $ wc.DownloadFile ($ _. src, ("c: \ tools \" + [io.path] :: GetFileName ($ _. src))
Zaujímavým príkladom použitia rutiny Invoke-WebRequest je spôsob, ako zistiť externú IP adresu počítača z PowerShell..
Ako sťahovať súbor cez HTTP pomocou PowerShell
Invoke-WebRequest môže fungovať ako analóg Wget alebo CURL pre Windows, čo vám umožní stiahnuť požadovaný súbor alebo súbory z webovej stránky alebo ftp stránky. Predpokladajme, že potrebujeme použiť PowerShell na stiahnutie určitého súboru prostredníctvom HTTP (v našom príklade distribúcia Mozilla Firefox). Spustite nasledujúci príkaz:
Invoke-WebRequest "https://download.mozilla.org/?product=firefox-32.0.3-SSL&os=win&lang=sk" -outfile "c: \ tools \ firefox setup 32.0.3.exe"
V dôsledku spustenia rutiny cmdlet sa súbor stiahne z určenej adresy URL a uloží sa do adresára c: \ tools \ pod názvom firefox setup 32.0.3.exe. Ak potrebujete stiahnuť súbor z FTP servera, stačí nahradiť http: // ftp: //.
Súbory môžete sťahovať aj z webového servera pomocou služby BITS v synchronnom režime.Takto môžete na konkrétnej webovej stránke ľahko nájsť všetky odkazy, ktoré spadajú pod konkrétne kritériá (trieda odkazov, rozlíšenie v názve súboru, adresa URL) a sťahovať súbory pomocou prijatých odkazov. Napríklad existuje webová stránka s množstvom odkazov na dokumenty PDF. Vašou úlohou je stiahnuť všetky tieto súbory do počítača. Páteř skriptu PowerShell pre hromadné sťahovanie súborov môže vyzerať takto:
$ OutDir = "C: \ Downloads \ docs \ PDF"
$ SiteAdress = "https://www.site.ru/free-pdf-books/"
$ HttpContent = Invoke-WebRequest -URI $ SiteAdress
$ HttpContent.Links | Where-Object $ _. Href-like "* .pdf" | % Invoke-WebRequest -Uri $ _. Href -OutFile ($ OutDir + $ (Get-Random 100000) + ". Pdf")
V dôsledku skriptu v cieľovom adresári sa stiahnu všetky súbory PDF zo stránky. Každý súbor je uložený pod ľubovoľným menom..
V PowerShell 6.1 cmdlet Invoke-WebRequest podporuje režim obnovenia. Preto pomocou parametra Invoke-WebRequest -Uri $ Uri -OutFile $ OutFile -životopis v prípade zlyhania kanála alebo servera môžete pokračovať v sťahovaní súboru.Powershell vyplňovanie a odosielanie webových formulárov
Mnoho webových služieb vyžaduje na vstup rôzne údaje vo formulároch HTML. s vyvolať-WebRequest Máte prístup k akémukoľvek formuláru HTML, vyplňte požadované polia a vyplnený formulár odošlite späť na server. V tomto príklade ukážeme, ako používať Powershell na prihlásenie do poštovej schránky populárnej ruskej služby mail.ru prostredníctvom štandardného webového formulára..
Pomocou nasledujúcej konštrukcie ukladáme informácie o súboroch cookie pre pripojenie do samostatnej premennej relácie:
$ mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session
Nasledujúci príkaz zobrazí zoznam polí, ktoré treba vyplniť vo formulári autorizácie HTML (formulár sa nazýva LoginExternal):
$ mailru.Forms ["LoginExternal"]. Polia
Všetky polia priraďte potrebné hodnoty:
$ mailru.Forms ["LoginExternal"]. Polia ["Login"] = "[email protected]"
$ mailru.Forms ["LoginExternal"]. Polia ["Password"] = "Str0NgP $$ w0rd"
Atď ... .
Ak chcete vyplniť formulár na webový server, zavolajte atribút akcie formulára HTML.
$ Log = Invoke-WebRequest -method POST -URI ("https://e.mail.ru/login" + $ mailru.Forms ["LoginExternal"]. Action) -Body $ mailru.Forms ["LoginExternal"]. Polia - relácia $ WebSession $
Nevýhody rutiny Invoke-WebRequest
Jednou z hlavných nevýhod cmdletov Invoke-WebRequest je pomerne nízka rýchlosť. Po stiahnutí súboru HTTP sa prúd úplne uloží do vyrovnávacej pamäte a až po dokončení úplného stiahnutia sa uloží na disk. Preto pri preberaní veľkých súborov môže dôjs nedostatok pamäte.
Ďalším problémom je cmdlet Invoke-WebRequest úzko súvisí s programom Internet Explorer. Napríklad vo vydaniach systému Windows Server Core, kde nie je nainštalovaný IE, nemôžete použiť cmdlet Invoke-WebRequest..
Ak sa na stránke HTTP používa certifikát s vlastným podpisom, cmdlet Invoke-WebRequest odmietne z nej prijímať údaje. Ak chcete ignorovať neplatný certifikát SSL, použite nasledujúci kód:
Takto môžete ignorovať SSL certifikát:add-type @ "
pomocou System.Net;
pomocou System.Security.Cryptography.X509Certificates;
verejná trieda TrustAllCertsPolicy: ICertificatePolicy
verejné bool CheckValidationResult (
ServicePoint srvPoint, X509Certifikačný certifikát,
WebRequest request, int certificateProblem)
návrat true;
"@
[System.Net.ServicePointManager] :: CertificatePolicy = TrustAllCertsPolicy pre nový objekt
$ result = Invoke-WebRequest -Uri "https://site.ru"