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
Anda dapat menyalurkan isi permintaan web ke cmdlet ini.
Output
Cmdlet ini mengembalikan objek respons yang mewakili hasil permintaan web.
Catatan
Windows PowerShell menyertakan alias berikut untuk Invoke-WebRequest
:
iwr
Link Terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk