Invoke-WebRequest
인터넷의 웹 페이지에서 콘텐츠를 가져옵니다.
구문
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>]
Description
cmdlet은 Invoke-WebRequest
HTTP, HTTPS, FTP 및 FILE 요청을 웹 페이지 또는 웹 서비스로 보냅니다. 응답을 구문 분석하고 양식, 링크, 이미지 및 기타 중요한 HTML 요소의 컬렉션을 반환합니다.
이 cmdlet은 Windows PowerShell 3.0에서 도입되었습니다.
참고 항목
기본적으로 웹 페이지의 스크립트 코드는 페이지를 구문 분석하여 속성을 채울 ParsedHtml
때 실행될 수 있습니다. 스위치를 -UseBasicParsing
사용하여 이를 표시하지 않습니다.
Important
이 문서의 예제는 도메인의 호스트를 contoso.com
참조합니다. 예를 들어 Microsoft에서 사용하는 가상의 도메인입니다. 이 예제는 cmdlet을 사용하는 방법을 보여 줍니다.
그러나 contoso.com
사이트가 없으므로 예제가 작동하지 않습니다. 사용자 환경의 호스트에 예제를 조정합니다.
예제
예제 1: 웹 요청 보내기
이 예제에서는 cmdlet을 Invoke-WebRequest
사용하여 웹 요청을 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
반환된 Invoke-WebRequest
데이터는 변수에 $Response
저장됩니다.
응답의 InputFields 속성에는 양식 필드가 포함됩니다.
Where-Object
은 이름 속성이 "* Value"와 같은 양식 필드를 필터링하는 데 사용됩니다. 필터링된 결과는 이름 및 Select-Object
속성을 선택하기 위해 파이프됩니다.
예제 2: 상태 저장 웹 서비스 사용
이 예제에서는 Facebook과 같은 상태 저장 웹 서비스에서 cmdlet을 사용하는 Invoke-WebRequest
방법을 보여줍니다.
$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
첫 번째 명령은 cmdlet을 Invoke-WebRequest
사용하여 로그인 요청을 보냅니다. 이 명령은 SessionVariable 매개 변수 값에 대해 "FB" 값을 지정하고 결과를 변수에 $R
저장합니다. 명령이 완료되면 $R
변수에 HtmlWebResponseObject가 포함되고 $FB
변수에 WebRequestSession 개체가 포함됩니다.
cmdlet이 Invoke-WebRequest
facebook 속성은 사용자가 성공적으로 로그인되었음을 나타냅니다.
예제 3: 웹 페이지에서 링크 가져오기
이 명령은 웹 페이지에 있는 링크를 가져옵니다.
(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href
cmdlet은 Invoke-WebRequest
웹 페이지 콘텐츠를 가져옵니다.
그런 다음 반환된 HtmlWebResponseObject의 Links 속성을 사용하여 각 링크의 Href 속성을 표시합니다.
예제 4: Invoke-WebRequest에서 성공하지 않은 메시지 catch
Invoke-WebRequest
성공하지 못한 HTTP 메시지(404, 500 등)가 발생하면 출력을 반환하지 않고 종료 오류를 throw합니다. 오류를 catch하고 StatusCode를 보려면 실행을 블록으로 묶을 try/catch
수 있습니다.
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
종료 오류는 예외 개체에서 StatusCodecatch
검색하는 블록에 의해 catch됩니다.
예제 8: 동시에 여러 파일 다운로드
cmdlet은 Invoke-WebRequest
한 번에 하나의 파일만 다운로드할 수 있습니다. 다음 예제에서는 여러 스레드 작업을 만들어 동시에 여러 파일을 다운로드하는 데 사용합니다 Start-ThreadJob
.
$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
}
참고 항목
cmdlet을 Start-ThreadJob
사용하려면 PowerShell 갤러리 ThreadJob 모듈을 설치해야 합니다.
매개 변수
-Body
요청 본문을 지정합니다. 본문은 헤더 뒤에 있는 요청의 내용입니다.
본문 값을 으로 파이프할 Invoke-WebRequest
수도 있습니다.
Body 매개 변수를 사용하여 쿼리 매개 변수 목록을 지정하거나 응답 내용을 지정할 수 있습니다.
입력이 GET 요청이고 본문이 IDictionary (일반적으로 해시 테이블)인 경우 본문은 쿼리 매개 변수로 URI에 추가됩니다. 다른 요청 형식(예: POST)의 경우 본문은 표준 name=value
형식의 요청 본문 값으로 설정됩니다.
본문이 폼이거나 호출의 Invoke-WebRequest
출력인 경우 PowerShell은 요청 콘텐츠를 양식 필드로 설정합니다.
예시:
$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
- 또는-
Invoke-RestMethod https://website.com/service.aspx -Body $r.Forms\[0\]
형식: | Object |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Certificate
보안 웹 요청에 사용되는 클라이언트 인증서를 지정합니다. 인증서가 포함된 변수를 입력하거나 인증서를 가져오는 명령 또는 식을 입력합니다.
인증서를 찾으려면 인증서(Get-PfxCertificate
) 드라이브에서 cmdlet을 사용하거나 사용합니다.Get-ChildItem
Cert:
인증서가 유효하지 않거나 권한이 충분하지 않으면 명령이 실패합니다.
형식: | X509Certificate |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-CertificateThumbprint
요청을 보낼 수 있는 권한이 있는 사용자 계정의 디지털 공개 키 인증서(X509)를 지정합니다. 인증서의 인증서 지문을 입력합니다.
인증서는 클라이언트 인증서 기반 인증에 사용됩니다. 인증서는 도메인 계정이 아닌 로컬 사용자 계정에만 매핑할 수 있습니다.
인증서 지문을 보려면 또는 명령을 사용하여 Get-Item
인증서를 찾습니다Get-ChildItem
.Cert:\CurrentUser\My
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-ContentType
웹 요청의 콘텐츠 형식을 지정합니다.
ContentType 값에 인코딩 형식(charset
)이 포함된 경우 cmdlet은 해당 형식을 사용하여 웹 요청의 본문을 인코딩합니다.
ContentType 인코딩 형식을 지정하지 않으면 기본 인코딩 형식이 대신 사용됩니다. 인코딩 형식이 있는 ContentType의 예로는 text/plain; charset=iso-8859-5
가 있으며, 이는 라틴어/키릴 자모 알파벳을 지정합니다.
매개 변수를 생략하면 사용하는 HTTP 메서드에 따라 콘텐츠 형식이 다를 수 있습니다.
- POST 메서드의 경우 콘텐츠 형식이
application/x-www-form-urlencoded
- PUT 메서드의 경우 콘텐츠 형식이
application/json
- 다른 메서드의 경우 콘텐츠 형식이 요청에 지정되지 않습니다.
InFile 매개 변수를 사용하여 파일을 업로드하는 경우 콘텐츠 형식을 설정해야 합니다.
일반적으로 형식은 application/octet-stream
합니다. 그러나 엔드포인트의 요구 사항에 따라 콘텐츠 형식을 설정해야 합니다.
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Credential
요청을 보낼 수 있는 권한이 있는 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.
User01 또는 Domain01\User01과 같은 사용자 이름을 입력하거나 cmdlet에서 생성된 PSCredential합니다.
자격 증명은 PSCredential 개체에 저장되고 암호는 SecureString으로 저장됩니다.
참고 항목
SecureString 데이터 보호에 대한 자세한 내용은 SecureString이 얼마나 안전한가요?를 참조하세요.
형식: | PSCredential |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-DisableKeepAlive
cmdlet이 HTTP 헤더의 KeepAlive 값을 False로 설정했음을 나타냅니다. 기본적으로 KeepAlive는 True입니다. KeepAlive 는 후속 요청을 용이하게 하기 위해 서버에 대한 영구 연결을 설정합니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Headers
웹 요청의 헤더를 지정합니다. 해시 테이블 또는 사전을 입력합니다.
UserAgent 헤더를 설정하려면 UserAgent 매개 변수를 사용합니다. 이 매개 변수를 사용하여 UserAgent 또는 쿠키 헤더를 지정할 수 없습니다.
형식: | IDictionary |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-InFile
파일에서 웹 요청 본문의 콘텐츠를 가져옵니다. 경로 및 파일 이름을 입력합니다. 경로를 생략하면 기본값은 현재 위치입니다.
요청의 콘텐츠 형식도 설정해야 합니다. 예를 들어 파일을 업로드하려면 콘텐츠 형식을 설정해야 합니다. 일반적으로 형식은 application/octet-stream
합니다. 그러나 엔드포인트의 요구 사항에 따라 콘텐츠 형식을 설정해야 합니다.
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-MaximumRedirection
연결이 실패하기 전에 PowerShell이 대체 URI(Uniform Resource Identifier)로 연결을 리디렉션하는 횟수를 지정합니다. 기본 값은 5입니다. 값이 0이면 모든 리디렉션이 방지됩니다.
형식: | Int32 |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Method
웹 요청에 사용되는 메서드를 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.
Default
Delete
Get
Head
Merge
Options
Patch
Post
Put
Trace
형식: | WebRequestMethod |
허용되는 값: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-OutFile
이 cmdlet이 응답 본문을 저장하는 출력 파일을 지정합니다. 경로 및 파일 이름을 입력합니다. 경로를 생략하면 기본값은 현재 위치입니다.
기본적으로 Invoke-WebRequest
파이프라인에 결과를 반환합니다. 결과를 파일 및 파이프라인으로 보내려면 PassThru 매개 변수를 사용합니다.
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-PassThru
cmdlet이 결과를 파일에 쓰는 것 외에 결과를 반환한다는 것을 나타냅니다. 이 매개 변수는 OutFile 매개 변수가 명령에 사용되는 경우에만 유효합니다.
참고 항목
PassThru 매개 변수를 사용하는 경우 출력은 파이프라인에 기록되지만 파일은 비어 있습니다. 자세한 내용은 PowerShell 문제 #15409를 참조하세요.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Proxy
인터넷 리소스에 직접 연결하는 대신 요청에 대한 프록시 서버를 지정합니다. 네트워크 프록시 서버의 URI를 입력합니다.
형식: | Uri |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-ProxyCredential
프록시 매개 변수로 지정된 프록시 서버를 사용할 수 있는 권한이 있는 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.
사용자 이름(예: User01
cmdlet에서 생성된 개체)을 입력하거나 Domain01\User01
PSCredential합니다.
이 매개 변수는 프록시 매개 변수가 명령에 사용되는 경우에만 유효합니다. 동일한 명령에서는 ProxyCredential 및 ProxyUseDefaultCredentials 매개 변수를 사용할 수 없습니다.
형식: | PSCredential |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-ProxyUseDefaultCredentials
cmdlet이 현재 사용자의 자격 증명을 사용하여 프록시 매개 변수로 지정된 프록시 서버에 액세스하도록 나타냅니다.
이 매개 변수는 프록시 매개 변수가 명령에 사용되는 경우에만 유효합니다. 동일한 명령에서는 ProxyCredential 및 ProxyUseDefaultCredentials 매개 변수를 사용할 수 없습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-SessionVariable
이 cmdlet이 웹 요청 세션을 만들고 값에 저장하는 변수를 지정합니다.
달러 기호($
) 기호 없이 변수 이름을 입력합니다.
세션 변수 Invoke-WebRequest
를 지정하면 웹 요청 세션 개체를 만들고 PowerShell 세션에서 지정된 이름을 가진 변수에 할당합니다. 명령이 완료되는 즉시 세션에서 변수를 사용할 수 있습니다.
원격 세션과 달리 웹 요청 세션은 영구 연결이 아닙니다. 쿠키, 자격 증명, 최대 리디렉션 값 및 사용자 에이전트 문자열을 포함하여 연결 및 요청에 대한 정보를 포함하는 개체입니다. 웹 요청 간에 상태 및 데이터를 공유하는 데 사용할 수 있습니다.
후속 웹 요청에서 웹 요청 세션을 사용하려면 WebSession 매개 변수 값에 세션 변수를 지정합니다. PowerShell은 새 연결을 설정할 때 웹 요청 세션 개체의 데이터를 사용합니다. 웹 요청 세션의 값을 재정의하려면 UserAgent 또는 Credential과 같은 cmdlet 매개 변수를 사용합니다. 매개 변수 값이 웹 요청 세션의 값보다 우선합니다.
동일한 명령에서는 SessionVariable 및 WebSession 매개 변수를 사용할 수 없습니다.
형식: | String |
별칭: | SV |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-TimeoutSec
요청이 시간 초과되기 전에 보류할 수 있는 기간을 지정합니다. 값을 초 단위로 입력합니다. 기본값 0은 무기한 시간 제한을 지정합니다.
DNS(도메인 이름 시스템) 쿼리는 반환 또는 시간 초과에 최대 15초가 걸릴 수 있습니다. 요청에 해결이 필요한 호스트 이름이 포함되어 있고 TimeoutSec을 0보다 크지만 15초 미만의 값으로 설정하면 WebException이 throw되기까지 15초 이상 걸릴 수 있으며 요청 시간이 초과됩니다.
형식: | Int32 |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-TransferEncoding
전송 인코딩 HTTP 응답 헤더의 값을 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.
Chunked
Compress
Deflate
GZip
Identity
형식: | String |
허용되는 값: | chunked, compress, deflate, gzip, identity |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Uri
웹 요청을 보낼 인터넷 리소스의 URI(Uniform Resource Identifier)를 지정합니다. URI를 입력합니다. 이 매개 변수는 HTTP, HTTPS, FTP 및 FILE 값을 지원합니다.
이 매개 변수는 필수입니다. 매개 변수 이름 Uri 는 선택 사항입니다.
형식: | Uri |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-UseBasicParsing
cmdlet이 DOM(문서 개체 모델) 구문 분석 없이 HTML 콘텐츠에 응답 개체를 사용한다는 것을 나타냅니다. 이 매개 변수는 Windows Server 운영 체제의 Server Core 설치와 같이 컴퓨터에 Internet Explorer가 설치되어 있지 않은 경우에 필요합니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-UseDefaultCredentials
cmdlet이 현재 사용자의 자격 증명을 사용하여 웹 요청을 보내도록 나타냅니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-UserAgent
웹 요청에 대한 사용자 에이전트 문자열을 지정합니다. 기본 사용자 에이전트는 각 운영 체제 및 플랫폼에 대한 약간의 변형과 유사 Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0
합니다.
대부분의 인터넷 브라우저에서 사용되는 표준 사용자 에이전트 문자열을 사용하여 웹 사이트를 테스트하려면 Chrome, Firefox, InternetExplorer, Opera 및 Safari와 같은 PSUserAgent 클래스의 속성을 사용합니다. 예를 들어 다음 명령은 Internet Explorer에 대한 사용자 에이전트 문자열을 사용합니다. Invoke-WebRequest -Uri https://website.com/ -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-WebSession
웹 요청 세션을 지정합니다. 달러 기호($
)를 포함하여 변수 이름을 입력합니다.
웹 요청 세션의 값을 재정의하려면 UserAgent 또는 Credential과 같은 cmdlet 매개 변수를 사용합니다. 매개 변수 값이 웹 요청 세션의 값보다 우선합니다.
원격 세션과 달리 웹 요청 세션은 영구 연결이 아닙니다. 쿠키, 자격 증명, 최대 리디렉션 값 및 사용자 에이전트 문자열을 포함하여 연결 및 요청에 대한 정보를 포함하는 개체입니다. 웹 요청 간에 상태 및 데이터를 공유하는 데 사용할 수 있습니다.
웹 요청 세션을 만들려면 명령의 SessionVariable 매개 변수 Invoke-WebRequest
값에 달러 기호 없이 변수 이름을 입력합니다.
Invoke-WebRequest
는 세션을 만들고 변수에 저장합니다. 후속 명령에서 변수를 WebSession 매개 변수의 값으로 사용합니다.
동일한 명령에서는 SessionVariable 및 WebSession 매개 변수를 사용할 수 없습니다.
형식: | WebRequestSession |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
웹 요청의 본문을 이 cmdlet으로 파이프할 수 있습니다.
출력
이 cmdlet은 웹 요청의 결과를 나타내는 응답 개체를 반환합니다.
참고
Windows PowerShell에는 다음 별칭이 포함됩니다.Invoke-WebRequest
iwr
관련 링크
PowerShell