Invoke-WebRequest Powershell webtartalom és HTML webhelyfeldolgozás

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

tanács. Az Invoke-WebRequest parancsmag elérhető a Windows PowerShell 3.0 verzióban, ezért mielőtt elkezdené, használja ezt vagy egy újabb verziót. Ha a Posh több verziója van telepítve a számítógépére, válthat azok között.

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"

tanács. Ha proxykiszolgálón keresztül kapcsolódik az internethez, akkor a PoweShell-parancsmagok megfelelő működéséhez használja a cikkben található tippeket: Hogyan állítsuk be a PowerShell-et proxykiszolgálón keresztül történő eléréshez.

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"