Invoke-WebRequest

Mendapatkan konten dari halaman web di internet.

Sintaks

Invoke-WebRequest
      [-UseBasicParsing]
      [-Uri] <Uri>
      [-WebSession <WebRequestSession>]
      [-SessionVariable <String>]
      [-Credential <PSCredential>]
      [-UseDefaultCredentials]
      [-CertificateThumbprint <String>]
      [-Certificate <X509Certificate>]
      [-UserAgent <String>]
      [-DisableKeepAlive]
      [-TimeoutSec <Int32>]
      [-Headers <IDictionary>]
      [-MaximumRedirection <Int32>]
      [-Method <WebRequestMethod>]
      [-Proxy <Uri>]
      [-ProxyCredential <PSCredential>]
      [-ProxyUseDefaultCredentials]
      [-Body <Object>]
      [-ContentType <String>]
      [-TransferEncoding <String>]
      [-InFile <String>]
      [-OutFile <String>]
      [-PassThru]
      [<CommonParameters>]

Deskripsi

Invoke-WebRequest Cmdlet mengirimkan permintaan HTTP, HTTPS, FTP, dan FILE ke halaman web atau layanan web. Ini mengurai respons dan mengembalikan koleksi formulir, tautan, gambar, dan elemen HTML signifikan lainnya.

Cmdlet ini diperkenalkan di Windows PowerShell 3.0.

Catatan

Secara default, kode skrip di halaman web dapat dijalankan ketika halaman sedang diurai untuk mengisi ParsedHtml properti. Gunakan sakelar -UseBasicParsing untuk menekan ini.

Penting

Contoh dalam artikel ini mereferensikan host di contoso.com domain. Ini adalah domain fiktif yang digunakan oleh Microsoft misalnya. Contoh dirancang untuk menunjukkan cara menggunakan cmdlet. Namun, karena contoso.com situs tidak ada, contohnya tidak berfungsi. Sesuaikan contoh ke host di lingkungan Anda.

Contoh

Contoh 1: Mengirim permintaan web

Contoh ini menggunakan Invoke-WebRequest cmdlet untuk mengirim permintaan web ke situs Bing.com.

$Response = Invoke-WebRequest -UseBasicParsing -URI https://www.bing.com?q=how+many+feet+in+a+mile
$Response.InputFields |
    Where-Object name -like "* Value" |
    Select-Object name, value

name       value
----       -----
From Value 1
To Value   5280

Data yang dikembalikan oleh Invoke-WebRequest disimpan dalam $Response variabel . Properti InputFields dari respons berisi bidang formulir. Where-Object digunakan untuk memfilter bidang formulir ke bidang yang properti namanya seperti "* Nilai". Hasil yang difilter disalurkan ke untuk Select-Object memilih properti nama dan nilai .

Contoh 2: Menggunakan layanan web stateful

Contoh ini menunjukkan cara menggunakan Invoke-WebRequest cmdlet dengan layanan web stateful, seperti Facebook.

$R = Invoke-WebRequest https://www.facebook.com/login.php -SessionVariable fb
# This command stores the first form in the Forms property of the $R variable in the $Form variable.
$Form = $R.Forms[0]
# This command shows the fields available in the Form.
$Form.fields

Key                     Value
---                     -----
...
email
pass
...

# These commands populate the username and password of the respective Form fields.
$Form.Fields["email"]="User01@Fabrikam.com"
$Form.Fields["pass"]="P@ssw0rd"
# This command creates the Uri that will be used to log in to facebook.
# The value of the Uri parameter is the value of the Action property of the form.
$Uri = "https://www.facebook.com" + $Form.Action
# Now the Invoke-WebRequest cmdlet is used to sign into the Facebook web service.
# The WebRequestSession object in the $FB variable is passed as the value of the WebSession parameter.
# The value of the Body parameter is the hash table in the Fields property of the form.
# The value of the *Method* parameter is POST. The command saves the output in the $R variable.
$R = Invoke-WebRequest -Uri $Uri -WebSession $FB -Method POST -Body $Form.Fields
$R.StatusDescription

Perintah pertama menggunakan Invoke-WebRequest cmdlet untuk mengirim permintaan masuk. Perintah menentukan nilai "FB" untuk nilai parameter SessionVariable , dan menyimpan hasilnya dalam $R variabel. Ketika perintah selesai, variabel berisi HtmlWebResponseObject dan $FB variabel berisi objek WebRequestSession.$R

Invoke-WebRequest Setelah cmdlet masuk ke facebook, properti StatusDescription dari objek respons web dalam $R variabel menunjukkan bahwa pengguna berhasil masuk.

Contoh 3: Mendapatkan tautan dari halaman web

Perintah ini mendapatkan tautan di halaman web.

(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href

Invoke-WebRequest Cmdlet mendapatkan konten halaman web. Kemudian properti Tautan dari HtmlWebResponseObject yang dikembalikan digunakan untuk menampilkan properti Href dari setiap tautan.

Contoh 4: Menangkap pesan yang tidak berhasil dari Invoke-WebRequest

Ketika Invoke-WebRequest menemukan pesan HTTP yang tidak berhasil (404, 500, dll.), pesan HTTP tidak mengembalikan output dan melemparkan kesalahan yang mengakhiri. Untuk menangkap kesalahan dan melihat StatusCode , Anda dapat mengapit eksekusi dalam try/catch blok.

try
{
    $Response = Invoke-WebRequest -Uri "www.microsoft.com/unkownhost"
    # This will only execute if the Invoke-WebRequest is successful.
    $StatusCode = $Response.StatusCode
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode

404

Kesalahan penghentian ditangkap oleh catch blok , yang mengambil StatusCode dari objek Pengecualian .

Contoh 8: Mengunduh beberapa file secara bersamaan

Invoke-WebRequest Cmdlet hanya dapat mengunduh satu file pada satu waktu. Contoh berikut menggunakan Start-ThreadJob untuk membuat beberapa pekerjaan utas untuk mengunduh beberapa file secara bersamaan.

$baseUri = 'https://github.com/PowerShell/PowerShell/releases/download'
$files = @(
    @{
        Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.msi"
        OutFile = 'PowerShell-7.3.0-preview.5-win-x64.msi'
    },
    @{
        Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.zip"
        OutFile = 'PowerShell-7.3.0-preview.5-win-x64.zip'
    },
    @{
        Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.msi"
        OutFile = 'PowerShell-7.2.5-win-x64.msi'
    },
    @{
        Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.zip"
        OutFile = 'PowerShell-7.2.5-win-x64.zip'
    }
)

$jobs = @()

foreach ($file in $files) {
    $jobs += Start-ThreadJob -Name $file.OutFile -ScriptBlock {
        $params = $using:file
        Invoke-WebRequest @params
    }
}

Write-Host "Downloads started..."
Wait-Job -Job $jobs

foreach ($job in $jobs) {
    Receive-Job -Job $job
}

Catatan

Untuk menggunakan Start-ThreadJob cmdlet, Anda harus menginstal modul ThreadJob dari Galeri PowerShell.

Parameter

-Body

Menentukan isi permintaan. Isi adalah konten permintaan yang mengikuti header. Anda juga dapat menyalurkan nilai isi ke Invoke-WebRequest.

Parameter Isi dapat digunakan untuk menentukan daftar parameter kueri atau menentukan konten respons.

Ketika input adalah permintaan GET dan isinya adalah IDictionary (biasanya, tabel hash), isi ditambahkan ke URI sebagai parameter kueri. Untuk jenis permintaan lain (seperti POST), isi diatur sebagai nilai isi permintaan dalam format standar name=value .

Saat isi adalah formulir, atau merupakan output panggilan Invoke-WebRequest , PowerShell mengatur konten permintaan ke bidang formulir. Contohnya:

$r = Invoke-WebRequest https://website.com/login.aspx $r.Forms\[0\].Name = "MyName" $r.Forms\[0\].Password = "MyPassword" Invoke-RestMethod https://website.com/service.aspx -Body $r

  • atau -

Invoke-RestMethod https://website.com/service.aspx -Body $r.Forms\[0\]

Type:Object
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Certificate

Menentukan sertifikat klien yang digunakan untuk permintaan web yang aman. Masukkan variabel yang berisi sertifikat atau perintah atau ekspresi yang mendapatkan sertifikat.

Untuk menemukan sertifikat, gunakan Get-PfxCertificate atau gunakan Get-ChildItem cmdlet di drive Sertifikat (Cert:). Jika sertifikat tidak valid atau tidak memiliki otoritas yang memadai, perintah gagal.

Type:X509Certificate
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CertificateThumbprint

Menentukan sertifikat kunci publik digital (X509) dari akun pengguna yang memiliki izin untuk mengirim permintaan. Masukkan thumbprint sertifikat sertifikat.

Sertifikat digunakan dalam autentikasi berbasis sertifikat klien. Sertifikat hanya dapat dipetakan ke akun pengguna lokal, bukan akun domain.

Untuk melihat thumbprint sertifikat, gunakan Get-Item perintah atau Get-ChildItem untuk menemukan sertifikat di Cert:\CurrentUser\My.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ContentType

Menentukan tipe isi permintaan web.

Jika parameter ini dihilangkan dan metode permintaan adalah POST, Invoke-WebRequest atur jenis konten ke application/x-www-form-urlencoded. Jika tidak, tipe konten tidak ditentukan dalam panggilan.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Menentukan akun pengguna yang memiliki izin untuk mengirim permintaan. Defaultnya adalah pengguna saat ini.

Ketik nama pengguna, seperti User01 atau Domain01\User01, atau masukkan objek PSCredential yang dihasilkan oleh Get-Credential cmdlet.

Kredensial disimpan dalam objek PSCredential dan kata sandi disimpan sebagai SecureString.

Catatan

Untuk informasi selengkapnya tentang perlindungan data SecureString , lihat Seberapa aman SecureString?.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableKeepAlive

Menunjukkan bahwa cmdlet mengatur nilai KeepAlive di header HTTP ke False. Secara default, KeepAlive adalah True. KeepAlive membuat koneksi persisten ke server untuk memfasilitasi permintaan berikutnya.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Headers

Menentukan header permintaan web. Masukkan tabel hash atau kamus.

Untuk mengatur header UserAgent , gunakan parameter UserAgent . Anda tidak dapat menggunakan parameter ini untuk menentukan header UserAgent atau cookie.

Type:IDictionary
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InFile

Mendapatkan konten permintaan web dari file.

Masukkan jalur dan nama file. Jika Anda menghilangkan jalur, defaultnya adalah lokasi saat ini.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaximumRedirection

Menentukan berapa kali PowerShell mengalihkan koneksi ke Pengidentifikasi Sumber Daya Seragam (URI) alternatif sebelum koneksi gagal. Nilai defaultnya adalah 5. Nilai 0 (nol) mencegah semua pengalihan.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Method

Menentukan metode yang digunakan untuk permintaan web. Nilai yang dapat diterima untuk parameter ini adalah:

  • Default
  • Delete
  • Get
  • Head
  • Merge
  • Options
  • Patch
  • Post
  • Put
  • Trace
Type:WebRequestMethod
Accepted values:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutFile

Menentukan file output tempat cmdlet ini menyimpan isi respons. Masukkan jalur dan nama file. Jika Anda menghilangkan jalur, defaultnya adalah lokasi saat ini.

Secara default, Invoke-WebRequest mengembalikan hasil ke alur. Untuk mengirim hasil ke file dan ke alur, gunakan parameter Passthru .

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

Menunjukkan bahwa cmdlet mengembalikan hasilnya, selain menulisnya ke file. Parameter ini hanya valid ketika parameter OutFile juga digunakan dalam perintah .

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Proxy

Menentukan server proksi untuk permintaan, daripada menyambungkan langsung ke sumber daya Internet. Masukkan URI server proksi jaringan.

Type:Uri
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ProxyCredential

Menentukan akun pengguna yang memiliki izin untuk menggunakan server proksi yang ditentukan oleh parameter Proksi . Defaultnya adalah pengguna saat ini.

Ketik nama pengguna, seperti User01 atau Domain01\User01, atau masukkan objek PSCredential , seperti yang dihasilkan oleh Get-Credential cmdlet.

Parameter ini hanya valid ketika parameter Proksi juga digunakan dalam perintah . Anda tidak dapat menggunakan parameter ProxyCredential dan ProxyUseDefaultCredentials dalam perintah yang sama.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ProxyUseDefaultCredentials

Menunjukkan bahwa cmdlet menggunakan kredensial pengguna saat ini untuk mengakses server proksi yang ditentukan oleh parameter Proksi .

Parameter ini hanya valid ketika parameter Proksi juga digunakan dalam perintah . Anda tidak dapat menggunakan parameter ProxyCredential dan ProxyUseDefaultCredentials dalam perintah yang sama.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SessionVariable

Menentukan variabel yang cmdlet ini membuat sesi permintaan web dan menyimpannya dalam nilai . Masukkan nama variabel tanpa simbol tanda dolar ($).

Saat Anda menentukan variabel sesi, Invoke-WebRequest membuat objek sesi permintaan web dan menetapkannya ke variabel dengan nama yang ditentukan dalam sesi PowerShell Anda. Anda dapat menggunakan variabel dalam sesi Anda segera setelah perintah selesai.

Tidak seperti sesi jarak jauh, sesi permintaan web bukan koneksi persisten. Ini adalah objek yang berisi informasi tentang koneksi dan permintaan, termasuk cookie, kredensial, nilai pengalihan maksimum, dan string agen pengguna. Anda dapat menggunakannya untuk berbagi status dan data di antara permintaan web.

Untuk menggunakan sesi permintaan web dalam permintaan web berikutnya, tentukan variabel sesi dalam nilai parameter WebSession . PowerShell menggunakan data dalam objek sesi permintaan web saat membuat koneksi baru. Untuk mengambil alih nilai dalam sesi permintaan web, gunakan parameter cmdlet, seperti UserAgent atau Credential. Nilai parameter lebih diutamakan daripada nilai dalam sesi permintaan web.

Anda tidak dapat menggunakan parameter SessionVariable dan WebSession dalam perintah yang sama.

Type:String
Aliases:SV
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TimeoutSec

Menentukan berapa lama permintaan dapat tertunda sebelum waktu habis. Masukkan nilai dalam detik. Nilai default, 0, menentukan batas waktu yang tidak terbatas.

Kueri Sistem Nama Domain (DNS) bisa memakan waktu hingga 15 detik untuk kembali atau kehabisan waktu. Jika permintaan Anda berisi nama host yang memerlukan resolusi, dan Anda mengatur TimeoutSec ke nilai yang lebih besar dari nol, tetapi kurang dari 15 detik, dibutuhkan waktu 15 detik atau lebih sebelum WebException dilemparkan, dan waktu permintaan Anda habis.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TransferEncoding

Menentukan nilai untuk header respons HTTP pengodean transfer. Nilai yang dapat diterima untuk parameter ini adalah:

  • Chunked
  • Compress
  • Deflate
  • GZip
  • Identity
Type:String
Accepted values:chunked, compress, deflate, gzip, identity
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Uri

Menentukan Pengidentifikasi Sumber Daya Seragam (URI) sumber daya Internet tempat permintaan web dikirim. Masukkan URI. Parameter ini mendukung nilai HTTP, HTTPS, FTP, dan FILE.

Parameter ini diperlukan. Nama parameter Uri bersifat opsional.

Type:Uri
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-UseBasicParsing

Menunjukkan bahwa cmdlet menggunakan objek respons untuk konten HTML tanpa penguraian Model Objek Dokumen (DOM). Parameter ini diperlukan ketika Internet Explorer tidak diinstal pada komputer, seperti pada penginstalan Server Core dari sistem operasi Windows Server.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseDefaultCredentials

Menunjukkan bahwa cmdlet menggunakan kredensial pengguna saat ini untuk mengirim permintaan web.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UserAgent

Menentukan string agen pengguna untuk permintaan web. Agen pengguna default mirip Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 dengan sedikit variasi untuk setiap sistem operasi dan platform.

Untuk menguji situs web dengan string agen pengguna standar yang digunakan oleh sebagian besar browser Internet, gunakan properti kelas PSUserAgent , seperti Chrome, FireFox, InternetExplorer, Opera, dan Safari. Misalnya, perintah berikut menggunakan string agen pengguna untuk Internet Explorer: Invoke-WebRequest -Uri https://website.com/ -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WebSession

Menentukan sesi permintaan web. Masukkan nama variabel, termasuk tanda dolar ($).

Untuk mengambil alih nilai dalam sesi permintaan web, gunakan parameter cmdlet, seperti UserAgent atau Credential. Nilai parameter lebih diutamakan daripada nilai dalam sesi permintaan web.

Tidak seperti sesi jarak jauh, sesi permintaan web bukan koneksi persisten. Ini adalah objek yang berisi informasi tentang koneksi dan permintaan, termasuk cookie, kredensial, nilai pengalihan maksimum, dan string agen pengguna. Anda dapat menggunakannya untuk berbagi status dan data di antara permintaan web.

Untuk membuat sesi permintaan web, masukkan nama variabel, tanpa tanda dolar, dalam nilai parameter SessionVariable dari perintah Invoke-WebRequest . Invoke-WebRequest membuat sesi dan menyimpannya dalam variabel. Dalam perintah berikutnya, gunakan variabel sebagai nilai parameter WebSession .

Anda tidak dapat menggunakan parameter SessionVariable dan WebSession dalam perintah yang sama.

Type:WebRequestSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

Object

Anda dapat menyalurkan isi permintaan web ke cmdlet ini.

Output

HtmlWebResponseObject

Cmdlet ini mengembalikan objek respons yang mewakili hasil permintaan web.

Catatan

Windows PowerShell menyertakan alias berikut untuk Invoke-WebRequest:

  • iwr