다음을 통해 공유


Invoke-WebRequest

인터넷의 웹 페이지에서 콘텐츠를 가져옵니다.

Syntax

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 사용하여 이를 표시하지 않습니다.

예제

예제 1: 웹 요청 보내기

이 명령은 cmdlet을 Invoke-WebRequest 사용하여 웹 요청을 Bing.com 사이트로 보냅니다.

$R = Invoke-WebRequest -URI https://www.bing.com?q=how+many+feet+in+a+mile
$R.AllElements | Where-Object {
    $_.name -like "* Value" -and $_.tagName -eq "INPUT"
} | Select-Object Name, Value

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

첫 번째 명령은 요청을 실행하고 응답을 변수에 $R 저장합니다.

두 번째 명령은 Name 속성이 "* Value"와 같고 tagName이 "INPUT"인 AllElements 속성의 개체를 필터링합니다. 필터링된 결과는 에 파이프되어 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 저장합니다. 명령이 완료되면 변수에 $RHtmlWebResponseObject 가 포함되고 변수에 $FBWebRequestSession 개체가 포함됩니다.

cmdlet이 Invoke-WebRequest facebook에 로그인한 후 변수에 있는 $R 웹 응답 개체의 StatusDescription 속성은 사용자가 성공적으로 로그인되었음을 나타냅니다.

예제 3: 웹 페이지에서 링크 가져오기

이 명령은 웹 페이지에 있는 링크를 가져옵니다.

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

cmdlet은 Invoke-WebRequest 웹 페이지 콘텐츠를 가져옵니다. 그런 다음 반환된 HtmlWebResponseObjectLinks 속성을 사용하여 각 링크의 Href 속성을 표시합니다.

예제 4: Invoke-WebRequest 성공하지 않은 메시지 catch

Invoke-WebRequest 성공하지 못한 HTTP 메시지(404, 500 등)가 발생하면 출력을 반환하지 않고 종료 오류를 throw합니다. 오류를 catch하고 StatusCode 를 보려면 실행을 블록으로 묶을 try/catch 수 있습니다. 다음 예제에서는 이 작업을 수행하는 방법을 보여줍니다.

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

404

첫 번째 명령은 ErrorAction of Stop을 사용하여 를 호출 Invoke-WebRequest 합니다. 이 오류는 실패한 요청에 대해 종료 오류를 발생시킵 Invoke-WebRequest 니다. 종료 오류는 Exception 개체에서 StatusCode를 검색하는 블록에 의해 catch catch됩니다.

매개 변수

-Body

요청의 본문을 지정합니다. 본문은 헤더 뒤에 오는 요청 내용입니다. 본문 값을 로 파이프할 Invoke-WebRequest수도 있습니다.

Body 매개 변수를 사용하여 쿼리 매개 변수 목록을 지정하거나 응답 내용을 지정할 수 있습니다.

입력이 GET 요청이고 본문이 IDictionary (일반적으로 해시 테이블)인 경우 본문은 쿼리 매개 변수로 URI에 추가됩니다. 다른 GET 요청의 경우 본문은 표준 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\]

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

-Certificate

보안 웹 요청에 사용되는 클라이언트 인증서를 지정합니다. 인증서가 포함된 변수를 입력하거나 인증서를 가져오는 명령 또는 식을 입력합니다.

인증서를 찾으려면 인증서(Cert:) 드라이브에서 cmdlet을 사용하거나 사용합니다 Get-PfxCertificateGet-ChildItem. 인증서가 잘못되었거나 권한이 없을 경우 명령이 실패합니다.

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

-CertificateThumbprint

요청을 보낼 권한이 있는 사용자 계정의 디지털 공개 키 인증서(X509)를 지정합니다. 인증서의 인증서 지문을 입력합니다. 인증서는 클라이언트 인증서 기반 인증에 사용됩니다. 인증서는 로컬 사용자 계정에만 매핑할 수 있으며 도메인 계정에는 사용할 수 없습니다.

인증서 지문을 가져오려면 PowerShell Cert: 드라이브에서 또는 Get-ChildItem 명령을 사용합니다Get-Item.

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

-ContentType

웹 요청의 콘텐츠 형식을 지정합니다.

이 매개 변수를 생략하고 요청 메서드가 POST Invoke-WebRequest 인 경우 콘텐츠 형식을 application/x-www-form-urlencoded로 설정합니다. 그러지 않으면 호출에서 콘텐츠 형식이 지정되지 않습니다.

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

-Credential

요청을 보낼 권한이 있는 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.

사용자 이름(예: User01 또는 Domain01\User01)을 입력하거나 cmdlet에서 생성된 것과 같은 PSCredential 개체를 Get-Credential 입력합니다.

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

-DisableKeepAlive

cmdlet이 HTTP 헤더의 KeepAlive 값을 False로 설정했음을 나타냅니다. 기본적으로 KeepAliveTrue입니다. KeepAlive는 후속 요청의 신속한 처리를 위해 서버에 대한 영구 연결을 설정합니다.

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

-Headers

웹 요청의 헤더를 지정합니다. 해시 테이블 또는 사전을 입력합니다.

UserAgent 헤더를 설정하려면 UserAgent 매개 변수를 사용합니다. 이 매개 변수를 사용하여 UserAgent 또는 쿠키 헤더를 지정할 수 없습니다.

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

-InFile

파일에서 웹 요청의 내용을 가져옵니다.

경로와 파일 이름을 입력합니다. 경로를 생략할 경우 기본값은 현재 위치입니다.

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

-MaximumRedirection

연결이 실패하기 전에 PowerShell이 대체 URI(Uniform Resource Identifier)로 연결을 리디렉션하는 횟수를 지정합니다. 기본값은 5입니다. 값 0은 모든 리디렉션을 차단합니다.

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

-Method

웹 요청에 사용되는 메서드를 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • Default
  • 삭제
  • 가져오기
  • Head
  • Merge
  • 옵션
  • 패치
  • 게시
  • Put
  • 추적
Type:WebRequestMethod
Accepted values:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutFile

이 cmdlet이 응답 본문을 저장하는 출력 파일을 지정합니다. 경로와 파일 이름을 입력합니다. 경로를 생략할 경우 기본값은 현재 위치입니다.

기본적으로 는 Invoke-WebRequest 파이프라인에 결과를 반환합니다. 결과를 파일과 파이프라인으로 보내려면 Passthru 매개 변수를 사용합니다.

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

-PassThru

cmdlet이 결과를 파일에 쓰는 것 외에 결과를 반환한다는 것을 나타냅니다. 이 매개 변수는 명령에 OutFile 매개 변수도 사용된 경우에만 유효합니다.

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

-Proxy

인터넷 리소스에 직접 연결하는 대신 요청에 대한 프록시 서버를 지정합니다. 네트워크 프록시 서버의 URI를 입력합니다.

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

-ProxyCredential

Proxy 매개 변수에 지정된 프록시 서버를 사용할 권한이 있는 사용자 계정을 지정합니다. 기본값은 현재 사용자입니다.

사용자 이름(예: User01 또는 Domain01\User01)을 입력하거나 cmdlet에서 생성된 것과 같은 PSCredential 개체를 Get-Credential 입력합니다.

이 매개 변수는 프록시 매개 변수가 명령에 사용되는 경우에만 유효합니다. 동일한 명령에 ProxyCredentialProxyUseDefaultCredentials 매개 변수를 함께 사용할 수는 없습니다.

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

-ProxyUseDefaultCredentials

cmdlet이 현재 사용자의 자격 증명을 사용하여 프록시 매개 변수로 지정된 프록시 서버에 액세스한다는 것을 나타냅니다.

이 매개 변수는 프록시 매개 변수가 명령에 사용되는 경우에만 유효합니다. 동일한 명령에 ProxyCredentialProxyUseDefaultCredentials 매개 변수를 함께 사용할 수는 없습니다.

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

-SessionVariable

이 cmdlet이 웹 요청 세션을 만들고 값에 저장하는 변수를 지정합니다. 달러 기호($) 기호 없이 변수 이름을 입력합니다.

세션 변수 Invoke-WebRequest 를 지정할 때 웹 요청 세션 개체를 만들고 PowerShell 세션에서 지정된 이름의 변수에 할당합니다. 명령이 완료되면 즉시 세션에서 변수를 사용할 수 있습니다.

원격 세션과 달리 웹 요청 세션은 영구 연결이 아닙니다. 쿠키, 자격 증명, 최대 리디렉션 횟수 값 및 사용자 에이전트 문자열을 포함하여 연결과 요청에 대한 정보가 포함된 개체입니다. 이 개체를 사용하여 웹 요청 간에 상태와 데이터를 공유할 수 있습니다.

후속 웹 요청에서 웹 요청 세션을 사용하려면 WebSession 매개 변수 값에 세션 변수를 지정합니다. PowerShell은 새 연결을 설정할 때 웹 요청 세션 개체의 데이터를 사용합니다. 웹 요청 세션의 값을 재정의하려면 UserAgent 또는 Credential과 같은 cmdlet 매개 변수를 사용합니다. 매개 변수 값이 웹 요청 세션의 값보다 우선합니다.

동일한 명령에서 SessionVariableWebSession 매개 변수를 사용할 수 없습니다.

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

-TimeoutSec

시간이 초과되기 전에 요청이 보류될 수 있는 기간을 지정합니다. 값을 초 단위로 입력합니다. 기본값 0은 무기한 시간 제한을 지정합니다.

DNS(도메인 이름 시스템) 쿼리는 반환하거나 시간 초과하는 데 최대 15초가 걸릴 수 있습니다. 요청에 해결이 필요한 호스트 이름이 포함되어 있고 TimeoutSec 을 0보다 크지만 15초 미만의 값으로 설정하면 WebException 이 throw되기까지 15초 이상 걸릴 수 있으며 요청 시간이 초과될 수 있습니다.

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

-TransferEncoding

transfer-encoding HTTP 응답 헤더의 값을 지정합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.

  • 청크 분할
  • 압축
  • Deflate
  • GZip
  • ID
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

웹 요청이 전송되는 인터넷 리소스의 URI(Uniform Resource Identifier)를 지정합니다. URI를 입력합니다. 이 매개 변수는 HTTP, HTTPS, FTP 및 FILE 값을 지원합니다.

이 매개 변수는 필수입니다.

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

-UseBasicParsing

cmdlet이 DOM(문서 개체 모델) 구문 분석 없이 HTML 콘텐츠에 응답 개체를 사용한다는 것을 나타냅니다. 이 매개 변수는 Windows Server 운영 체제의 Server Core 설치와 같이 컴퓨터에 Internet Explorer가 설치되지 않은 경우에 필요합니다.

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

-UseDefaultCredentials

cmdet이 현재 사용자의 자격 증명을 사용하여 웹 요청을 전송했음을 나타냅니다.

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

-UserAgent

웹 요청에 대한 사용자 에이전트 문자열을 지정합니다. 기본 사용자 에이전트는 각 운영 체제 및 플랫폼에 대한 약간의 변형과 유사 Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 합니다.

대부분의 인터넷 브라우저에서 사용되는 표준 사용자 에이전트 문자열을 사용하여 웹 사이트를 테스트하려면 Chrome, FireFox, InternetExplorer, Opera 및 Safari와 같은 PSUserAgent 클래스의 속성을 사용합니다. 예를 들어 다음 명령은 인터넷 Explorer 대한 사용자 에이전트 문자열을 사용합니다.

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

-WebSession

웹 요청 세션을 지정합니다. 달러 기호($)를 포함하여 변수 이름을 입력합니다.

웹 요청 세션의 값을 재정의하려면 UserAgent 또는 Credential과 같은 cmdlet 매개 변수를 사용합니다. 매개 변수 값이 웹 요청 세션의 값보다 우선합니다.

원격 세션과 달리 웹 요청 세션은 영구 연결이 아닙니다. 쿠키, 자격 증명, 최대 리디렉션 횟수 값 및 사용자 에이전트 문자열을 포함하여 연결과 요청에 대한 정보가 포함된 개체입니다. 이 개체를 사용하여 웹 요청 간에 상태와 데이터를 공유할 수 있습니다.

웹 요청 세션을 만들려면 명령의 SessionVariable 매개 변수 값에 변수 이름(달러 기호 없음)을 Invoke-WebRequest 입력합니다. Invoke-WebRequest 는 세션을 만들고 변수에 저장합니다. 후속 명령에서 변수를 WebSession 매개 변수 값으로 사용합니다.

동일한 명령에서 SessionVariableWebSession 매개 변수를 사용할 수 없습니다.

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

입력

Object

웹 요청의 본문을 로 파이프할 Invoke-WebRequest수 있습니다.

출력

HtmlWebResponseObject