PowerShell verzija 3.0 uvodi mogućnost izravnog pristupa i rada s HTML web stranicama na Internetu. Za to je razvijen poseban cmdlet. Pozovi-WebRequest. Ovaj cmdlet vam omogućuje implementaciju mnogih scenarija: od mogućnosti preuzimanja / prijenosa datoteke s / na bilo koje web mjesto putem HTTP / HTTPS / FTP, završavajući sa mogućnostima raščlanjivanja HTML stranica, praćenja stanja web poslužitelja, ispunjavanja i slanja web obrazaca. Općenito, novi cmdlet pruža sve potrebne metode za kretanje po DOM stablu HTML dokumenta. U ovom ćemo članku pogledati neke osnovne primjere rada s PowerShell Invoke-WebRequest cmdletom..
sadržaj:
- Korištenje Invoke-WebRequest Cmdlet
- Dobivamo popis svih HTML veza na stranici
- Analiza HTML stranica pomoću Powershell-a
- Kako preuzeti datoteku putem HTTP-a pomoću programa PowerShell
- Ovlašteno ispunjavanje i slanje web obrazaca
- Nedostaci cmdleta Invoke-WebRequest
Korištenje Invoke-WebRequest Cmdlet
cmdlet Pozovi-WebRequest (alias wget) može slati i primati HTTP, HTTPS i FTP zahtjeve, obrađivati odgovor koji je vratio poslužitelj. Odgovor je zbirka obrazaca, veza, slika i drugih važnih elemenata HTML dokumenta.
Pokušajmo sljedeću naredbu:
Invoke-WebRequest -Uri "http://winitpro.ru"
Kao što vidite, povratni odgovor nije jednostavan HTML kôd za stranicu. Vidite različita svojstva web dokumenta. Cmdlet Invoke-WebRequest, kao i većina ostalih PowerShell cmdleta, djeluje na objektima. Invoke-WebRequest vraća objekt tipa HtmlWebResponseObject. Pogledajmo sva svojstva ovog objekta:
$ WebResponseObj = Invoke-WebRequest -Uri "http://winitpro.ru"
$ WebResponseObj | Get-članica
Da biste dobili sirovi HTML kôd web stranice koja se nalazi u ovom objektu, izvršite:
$ WebResponseObj.content
Možete vratiti HTML kôd zajedno s HTTP naslovima koje vraća web poslužitelj:
$ WebResponseObj.rawcontent
Možete samo provjeriti kôd odgovora web poslužitelja i HTTP zaglavlja HTML stranice:
$ WebResponseObj.Headers
Kao što vidite, web poslužitelj je vratio odgovor 200, odnosno zahtjev je uspio, a web poslužitelj je dostupan i ispravno radi.
Dobivamo popis svih HTML veza na stranici
Okrećemo se glavnoj stranici naše stranice i dobivamo popis veza na njoj:$ SiteAdress = "http://winitpro.ru"
$ HttpContent = Invoke-WebRequest -URI $ SiteAdress
$ HttpContent.Links | Foreach $ _. Href
Da biste dobili sam tekst veze (koji se nalazi u elementu InnerText), možete koristiti ovu konstrukciju:
$ HttpContent.Links | fl innerText, href
Veze možete odabrati samo s određenom CSS klasom:
$ HttpContent.Links | Where-Object $ _. Class -eq "brojevi stranica" | fl innerText, href
Ili određeni tekst u URL-u:
$ HttpContent.Links | Gdje-objekt $ _. Href-sličan "* razmjena *" | fl innerText, href
Analiza HTML stranica pomoću Powershell-a
Cmdlet Invoke-WebRequest omogućuje vam brzo i povoljno raščlanjivanje sadržaja bilo kojih web stranica. Prilikom obrade HTML stranice iz njenog sadržaja formiraju se zbirke veza (veza), web obrasci (obrasci), slike (slike), skripte (skripte) itd..
Koristeći Powershell, dobivamo sadržaj glavne stranice našeg web mjesta:
$ Img = Invoke-WebRequest "https://winitpro.ru/"
Zatim nabrajamo sve slike na ovoj stranici:
$ Img.Images
Oblikovat ćemo kolekciju punih putova URL-a za korištene slike:
$ images = $ Img.Images | odaberite src
Inicijalizirajte novu instancu klase WebClient:
$ wc = Novi objektni sistem.Net.WebClient
Prenesite sve slike sa stranice (s izvornim imenima) u mapu c: \ tools \:
$ slike | foreach $ wc.DownloadFile ($ _. src, ("c: \ tools \" + [io.path] :: GetFileName ($ _. src))
Zanimljiv primjer korištenja cmdleta Invoke-WebRequest je način pronalaska vanjske IP adrese računala iz PowerShell-a.
Kako preuzeti datoteku putem HTTP-a pomoću programa PowerShell
Invoke-WebRequest može funkcionirati kao analogni Wget ili cURL za Windows, omogućujući vam da preuzmete željenu datoteku ili datoteke s web stranice ili ftp stranice. Pretpostavimo da moramo koristiti PowerShell za preuzimanje određene datoteke putem HTTP-a (u našem primjeru Mozilla Firefox distribucija). Pokrenite sljedeću naredbu:
Invoke-WebRequest "https://download.mozilla.org/?product=firefox-32.0.3-SSL&os=win&lang=en" -file "c: \ tools \ firefox setup 32.0.3.exe"
Kao rezultat pokretanja cmdleta, datoteka će se preuzeti s navedenog URL-a i spremiti u mapu c: \ tools \ pod nazivom firefox setup 32.0.3.exe. Ako trebate preuzeti datoteku s FTP mjesta, jednostavno zamijenite http: // s ftp: //.
Također možete preuzeti datoteke s web poslužitelja koristeći BITS u sinkronom načinu.Stoga na određenoj web stranici lako možete pronaći sve veze koje potpadaju pod određene kriterije (klasa veza, rezolucija u nazivu datoteke, url adresa) i preuzeti datoteke koristeći primljene veze. Na primjer, postoji web stranica s hrpom linkova do PDF dokumenata. Vaš je zadatak preuzeti sve te datoteke na vaše računalo. Okosnica PowerShell skripte za masovno preuzimanje datoteka može izgledati ovako:
$ 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")
Kao rezultat skripte u ciljnom direktoriju, preuzeće se sve PDF datoteke sa stranice. Svaka se datoteka sprema pod proizvoljnim nazivom..
U programu PowerShell 6.1, cmdlet Invoke-WebRequest podržava nastavak načina rada. Stoga pomoću parametra Invoke-WebRequest -Uri $ Uri -OutFile $ OutFile -rezime možete nastaviti s preuzimanjem datoteke u slučaju pada sustava ili poslužitelja.Ovlašteno ispunjavanje i slanje web obrazaca
Mnoge web usluge zahtijevaju unošenje različitih podataka u HTML obrasce. s Pozovi-WebRequest Možete pristupiti bilo kojem HTML obrascu, ispuniti potrebna polja i ispuniti ispunjeni obrazac natrag na poslužitelj. U ovom ćemo primjeru pokazati kako se pomoću Powershell-a za prijavu u poštanski sandučić popularne ruske usluge mail.ru putem standardnog web obrasca..
Pomoću sljedeće konstrukcije spremamo podatke kolačića za vezu u zasebnu varijablu sesije:
$ mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session
Sljedeća naredba prikazuje popis polja koja treba popuniti u HTML autorizacijskom obliku (obrazac se zove LoginExternal):
$ mailru.Forms ["LoginExternal"]. Polja
Dodijelite potrebne vrijednosti svim poljima:
$ mailru.Forms ["LoginExternal"]. Polja ["Login"] = "[email protected]"
$ mailru.Forms ["LoginExternal"]. Polja ["Lozinka"] = "Str0NgP $$ w0rd"
Itd ... .
Da biste ispunili obrazac na web poslužitelj, pozovite atribut akcije HTML obrasca.
$ Log = Invoke-WebRequest -method POST -URI ("https://e.mail.ru/login" + $ mailru.Forms ["LoginExternal"]. Akcija) -Body $ mailru.Forms ["LoginExternal"]. Polja -WebSession $ sesija
Nedostaci cmdleta Invoke-WebRequest
Jedan od glavnih nedostataka cmdleta Invoke-WebRequest je njegova relativno mala brzina. Nakon preuzimanja HTTP datoteke, stream se u potpunosti memorira u memoriju, a tek nakon dovršetka preuzimanja sprema se na disk. Dakle, pri preuzimanju velikih datoteka možda vam ponestaje memorije.
Drugi je problem što je cmdlet Invoke-WebRequest usko povezan s Internet Explorerom. Na primjer, u izdanjima Windows Server Core gdje IE nije instaliran, ne možete koristiti cmdlet Invoke-WebRequest.
Ako se na HTTP web mjestu koristi samopotpisni certifikat, cmdlet Invoke-WebRequest odbija primiti podatke s njega. Za zanemarivanje nevažećeg SSL certifikata koristite sljedeći kôd:
SSL certifikat možete zanemariti ovako:dodaj-up @ "
pomoću System.Net;
pomoću System.Security.Cryptography.X509Certifikati;
javna klasa TrustAllCertsPolicy: ICertificatePolicy
javni bool CheckValidationResult (
ServicePoint srvPoint, X509Certificate certifikat,
WebRequest zahtjev, int certifikatProblem)
povratak istinit;
„@
[System.Net.ServicePointManager] :: CertificatePolicy = Novi objekt TrustAllCertsPolicy
$ result = Invoke-WebRequest -Uri "https://site.ru"