A PowerShell 3.0 verziója bevezeti a HTML weboldalak közvetlen elérésének és az interneten való használatának lehetőségét. Erre egy speciális parancsmag került kifejlesztésre. Invoke-WebRequest. Ez a parancsmag lehetővé teszi számos forgatókönyv megvalósítását: kezdve a fájlok letöltésére / feltöltésére bármely webhelyről / bármely webhelyre HTTP / HTTPS / FTP-n keresztül, egészen a HTML oldalak elemzésének, a webszerverek állapotának figyelésének, a webes űrlapok kitöltésének és benyújtásának a képességéig. Általában az új parancsmag biztosítja az összes szükséges módszert a HTML dokumentum DOM-fajában való navigáláshoz. Ebben a cikkben néhány alapvető példát mutatunk be a PowerShell Invoke-WebRequest parancsmaggal való együttműködésről..
Tartalom:
- Az Invoke-WebRequest parancsmag használata
- Megkapjuk az oldalon található összes HTML hivatkozás listáját
- HTML oldalak elemzése a Powershell használatával
- Fájl letöltése HTTP-n keresztül a PowerShell használatával
- Powershell webes űrlapok kitöltése és benyújtása
- Az Invoke-WebRequest parancsmag hátrányai
Az Invoke-WebRequest parancsmag használata
parancsmaggal Invoke-WebRequest (alias wget) HTTP, HTTPS és FTP kéréseket küldhet és fogadhat, feldolgozza a szerver által visszaadott választ. A válasz űrlapok, hivatkozások, képek és a HTML-dokumentum más fontos elemeinek gyűjteménye.
Próbáljuk ki a következő parancsot:
Invoke-WebRequest -Uri "http://winitpro.ru"
Mint láthatja, a visszaküldött válasz nem egyszerű HTML-kód az oldalhoz. Láthatja a webdokumentum különféle tulajdonságait. Az Invoke-WebRequest parancsmag, mint a legtöbb más PowerShell-parancsmag, objektumokon működik. Az Invoke-WebRequest egy objektumot ad vissza HtmlWebResponseObject. Nézzük meg az objektum összes tulajdonságát:
$ WebResponseObj = Invoke-WebRequest -Uri "http://winitpro.ru"
$ WebResponseObj | Get-tag
Az objektumban található weboldal nyers HTML kódjának beolvasásához hajtsa végre a következőt:
$ WebResponseObj.content
Visszaadhatja a HTML kódot a webkiszolgáló által visszaadott HTTP fejlécekkel együtt:
$ WebResponseObj.rawcontent
Csak a weboldal szerver válaszkódját és a HTML oldal HTTP-fejléceit ellenőrizheti:
$ WebResponseObj.Headers
Mint láthatja, a webszerver válaszolt 200, azaz a kérés sikeres volt, és a webszerver elérhető és helyesen működik.
Megkapjuk az oldalon található összes HTML hivatkozás listáját
Megfordulunk honlapunkon a főoldalra, és megkapjuk az elérhető linkek listáját:$ SiteAdress = "http://winitpro.ru"
$ HttpContent = Invoke-WebRequest -URI $ SiteAdress
$ HttpContent.Links | Foreach $ _. Href
Magának a hivatkozásnak a szövegéhez (az InnerText elemben) a következő szerkezetet használhatja:
$ HttpContent.Links | fl innerText, href
Csak egy adott CSS osztályhoz tartozó linkeket választhat:
$ HttpContent.Links | Hol-objektum $ _. Osztály -eq "oldalszámok" | fl innerText, href
Vagy konkrét szöveg az URL-ben:
$ HttpContent.Links | Hol-objektum $ _. Href-szerű "* csere *" | fl innerText, href
HTML oldalak elemzése a Powershell használatával
Az Invoke-WebRequest parancsmag lehetővé teszi bármilyen weboldal tartalmának gyors és kényelmes elemzését. A HTML-oldal tartalmának feldolgozása során linkek (linkek), webes űrlapok (űrlapok), képek (képek), szkriptek (szkriptek) stb. Gyűjtődik össze.
A Powershell használatával megkapjuk weboldalunk főoldalának tartalmát:
$ Img = Invoke-WebRequest "https://winitpro.ru/"
Ezután felsoroljuk az összes képet ezen az oldalon:
$ Img.Images
A felhasznált képekhez teljes URL útvonalak gyűjteményét fogjuk képezni:
$ images = $ Img.Images | válassza az src lehetőséget
Inicializálja a WebClient osztály új példányát:
$ wc = Új objektum System.Net.WebClient
Töltse le az összes képet az oldalról (eredeti nevekkel) a c: \ tools \ könyvtárba:
$ képek | foreach $ wc.DownloadFile ($ _. src, ("c: \ tools \" + [io.path] :: GetFileName ($ _. src))
Az Invoke-WebRequest parancsmag érdekes példája a számítógép külső IP-címének a PowerShellből történő megismerésének módja..
Fájl letöltése HTTP-n keresztül a PowerShell használatával
Az Invoke-WebRequest analógként működhet a Wget vagy a cURL for Windows számára, lehetővé téve a kívánt fájl vagy fájlok letöltését egy weboldalról vagy az ftp webhelyről. Tegyük fel, hogy a PowerShell használatával kell letölt egy fájlt HTTP-n keresztül (példánkban a Mozilla Firefox disztribúció). Futtassa a következő parancsot:
Invoke-WebRequest "https://download.mozilla.org/?product=firefox-32.0.3-SSL&os=win&lang=en" -outfile “c: \ tools \ firefox setup 32.0.3.exe”
A parancsmag futtatásának eredményeként a fájl letöltésre kerül a megadott URL-ről, és a c: \ tools \ könyvtárba menti a firefox setup 32.0.3.exe néven. Ha fájlt kell letöltenie egy FTP-helyről, akkor cserélje ki a http: // címet az ftp: // -re..
A BITS szinkron módban fájlokat tölthet le egy webszerverről.Így egy adott weboldalon könnyen megtalálhatja az összes hivatkozást, amelyre a meghatározott kritériumok vonatkoznak (link osztály, felbontás a fájlnévben, URL cím), és letöltheti a fájlokat a kapott linkek segítségével. Például van egy weboldal, amelyben csomó link található a PDF-dokumentumokhoz. Az Ön feladata, hogy töltse le ezeket a fájlokat a számítógépére. A tömeges fájlok letöltésére szolgáló PowerShell szkript gerince így néz ki:
$ OutDir = "C: \ Letöltések \ docs \ PDF"
$ SiteAdress = "https://www.site.ru/free-pdf-books/"
$ HttpContent = Invoke-WebRequest -URI $ SiteAdress
$ HttpContent.Links | Hol-objektum $ _. Href-szerű "* .pdf" | % Invoke-WebRequest -Uri $ _. Href -OutFile ($ OutDir + $ (Get-Random 100000) + ". Pdf")
A célkönyvtárban található parancsfájl eredményeként az oldal összes pdf fájlja letöltésre kerül. Minden fájlt tetszőleges néven mentünk..
A PowerShell 6.1 verziójában az Invoke-WebRequest parancsmag támogatja a folytatás módját. Ezért az Invoke-WebRequest -Uri $ Uri -OutFile $ OutFile paraméter használatával -Folytatás csatorna vagy szerver összeomlása esetén folytathatja a fájl letöltését.Powershell webes űrlapok kitöltése és benyújtása
Számos webszolgáltatás működéséhez különféle adatok bevitele HTML formában szükséges. Az Invoke-WebRequest Bármely HTML-űrlaphoz hozzáférhet, kitölti a szükséges mezőket, és a kitöltött űrlapot visszajuttathatja a szerverre. Ebben a példában bemutatjuk, hogyan lehet a Powershell használatával bejelentkezni a népszerű orosz szerver mail.ru postaládájába a szokásos internetes űrlapon keresztül..
A következő felépítés felhasználásával a kapcsolat cookie-adatait külön munkamenet-változóban tároljuk:
$ mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session
A következő parancs megjeleníti a HTML engedélyezési űrlap kitöltéséhez szükséges mezők listáját (az űrlap neve LoginExternal):
$ mailru.Forms ["LoginExternal"]
Minden mezőhöz rendelje hozzá a szükséges értékeket:
$ mailru.Forms ["LoginExternal"]. Mezők ["Bejelentkezés"] = "[email protected]"
$ mailru.Forms ["LoginExternal"]. Mezők ["Jelszó]] =" Str0NgP $$ w0rd "
Stb. .
A kitöltött űrlap elküldéséhez a webszerverre hívja meg a HTML űrlapművelet attribútumát.
$ Log = Invoke-WebRequest-módszer POST -URI ("https://e.mail.ru/login" + $ mailru.Forms ["LoginExternal"]. Action) -Body $ mailru.Forms ["LoginExternal"]. Mezők -WebSession $ munkamenet
Az Invoke-WebRequest parancsmag hátrányai
Az Invoke-WebRequest parancsmag egyik legnagyobb hátránya a viszonylag alacsony sebesség. A HTTP-fájl letöltésekor az adatfolyam teljes mértékben pufferolódik a memóriába, és csak a teljes letöltés befejezése után kerül mentésre a lemezre. Így nagy fájlok letöltésekor elfogyhat a memória.
Egy másik probléma az Invoke-WebRequest parancsmag szorosan kapcsolódik az Internet Explorerhez. Például a Windows Server Core olyan kiadásaiban, ahol az IE nincs telepítve, nem használhatja az Invoke-WebRequest parancsmagot.
Ha egy önaláírt tanúsítványt használ a HTTP webhelyen, akkor az Invoke-WebRequest parancsmag megtagadja az adatok fogadását. Az érvénytelen SSL-tanúsítvány figyelmen kívül hagyásához használja a következő kódot:
Az SSL-tanúsítványt így figyelmen kívül hagyhatja:add-type @ "
a System.Net használatával;
a System.Security.Cryptography.X509 tanúsítványok használata;
nyilvános osztály TrustAllCertsPolicy: ICertificatePolicy
nyilvános bool CheckValidationResult (
ServicePoint srvPoint, X509Certificate tanúsítvány,
WebRequest kérés, int certificateProblem)
visszatér igaz;
„@
[System.Net.ServicePointManager] :: CertificatePolicy = Új objektum TrustAllCertsPolicy
$ eredmény = Invoke-WebRequest -Uri "https://site.ru"