이 Invoke-WebRequest PowerShell 프록시 가이드를 마치면 다음을 알게 됩니다:
- Invoke-WebRequest의 정의
- Windows, macOS, Linux에서 사용 방법
- PowerShell에서 프록시를 사용하기 전에 알아야 할 사항
- Invoke-WebRequest에서 HTTP 프록시를 지정하는 방법
- HTTPS 및 SOCKS 프록시 처리 방법
- PowerShell에서 전문가처럼 프록시를 사용하는 팁과 요령.
- 어떤 유형의 프록시를 선택해야 할까요?
자, 시작해 보겠습니다!
PowerShell Invoke-WebRequest란 무엇인가요?
Invoke-WebRequest는 웹 서버 및 웹 서비스에 HTTP, HTTPS, FTP 요청을 보내는 PowerShell cmdlet입니다. 기본적으로 서버에서 생성된 응답을 자동으로 파싱하여 양식, 링크, 이미지 또는 기타 중요한 HTML 요소들의 컬렉션을 반환합니다.
일반적으로 REST API에 접근하거나, 웹에서 파일을 다운로드하거나, 웹 서비스와 상호작용하는 데 사용됩니다. Invoke-WebRequest 요청의 기본 구문은 다음과 같습니다:
Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]
기억해야 할 주요 매개변수는 다음과 같습니다:
- -Uri: 요청이 전송될 웹 리소스의 URI입니다.
- -Method: 요청에 사용할 HTTP 메서드 (예: GET, POST, PUT, DELETE). Invoke-WebRequest는 기본적으로 GET 요청을 보냅니다.
- -Headers: 요청에 포함할 추가 HTTP 헤더입니다.
- -Body: 서버로 전송할 요청 본체.
보시다시피, 유일한 필수 인수는 <Uri>입니다. 따라서 간단히 말해, 주어진 URI에 GET 요청을 수행하는 가장 간단한 구문은 다음과 같습니다:
Invoke-WebRequest <Uri>
이 cmdlet은 2012년 PowerShell 3.0에서 도입되었습니다.
Invoke-WebRequest 설치
Invoke-WebRequest를 사용하려면 PowerShell이 필요합니다. 따라서 PowerShell을 설치하고 Invoke-WebRequest cmdlet을 사용할 수 있는 방법을 알아봅시다!
Windows
먼저, Windows PowerShell과 PowerShell은 서로 다른 개념임을 이해해야 합니다. Windows PowerShell은 Windows에 기본 제공되는 PowerShell 버전으로, 최신 버전은 5.1입니다. Windows PowerShell은 Invoke-WebRequest cmdlet을 제공합니다. 즉, 최신 Windows 버전을 사용 중이라면 바로 사용할 수 있습니다! 구버전의 경우 공식 PowerShell 설치 가이드를 따르세요.
동시에 Invoke-WebRequest의 일부 기능은 PowerShell 7.x부터만 사용할 수 있습니다. 설치 방법에 대한 자세한 내용은 Windows PowerShell 5.1에서 PowerShell 7로의 공식 마이그레이션 가이드를 따르세요. PowerShell 7.x는 새 디렉터리에 설치되며 Windows PowerShell 5.1과 병행 실행된다는 점에 유의하세요.
Windows 머신에 설치된 PowerShell의 현재 버전을 확인하려면 다음 명령을 사용하세요:
$PSVersionTable
PowerShell 7.x에서는 다음과 유사한 결과가 출력됩니다:
PSVersion 7.4.1
PSEdition Core
GitCommitId 7.4.1
OS Microsoft Windows 10.0.22631
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
macOS 및 Linux
PowerShell 7.x는 macOS와 Linux 모두에 설치할 수 있습니다. 그러나 Invoke-WebRequest cmdlet에 접근하기 위해 OS에 전체 PowerShell 생태계를 설치하는 것은 큰 의미가 없습니다. 대신 curl을 사용해야 합니다. 이 라이브러리는 macOS와 대부분의 Linux 배포판에 사전 설치되어 있으며 Invoke-WebRequest와 동일한 기능을 제공합니다. 자세한 내용은 curl 프록시 가이드에서 확인하세요.
PowerShell에서 프록시 사용을 시작하기 위한 필수 조건
프록시는 클라이언트와 대상 서버 사이의 중개자 역할을 합니다. 사용자의 요청을 가로채서 서버로 전달하고, 서버로부터 응답을 수신한 후 사용자에게 다시 보냅니다. 이렇게 하면 대상 서버는 요청이 사용자가 아닌 선택한 프록시 서버의 IP와 위치에서 온 것으로 인식합니다.
Invoke-WebRequest와 함께 PowerShell 프록시를 사용하려면 프록시 서버 URL의 형식을 이해해야 합니다.
다음은 PowerShell Invoke-WebRequest 프록시 URL의 형식입니다:
<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]
이 URL은 다음과 같이 구성됩니다:
- : 프록시 서버에 연결할 때 사용할 프로토콜입니다.
- : 프록시 서버의 호스트 이름에 해당하는 IP 주소 또는 URL입니다.
- : 프록시 서버가 수신 대기하는 포트 번호입니다.
- <USERNAME>: 프록시 인증이 필요할 때 지정하는 선택적 사용자 이름.
- <PASSWORD>: 프록시 인증이 필요할 때 지정하는 선택적 암호입니다.
URL의 <PROTOCOL>:// 부분은 Invoke-WebRequest에서 필수입니다. 이를 생략하면 다음 오류로 요청이 실패합니다:
Invoke-WebRequest : 상대 URI에 대해서는 이 작업이 지원되지 않습니다.
프록시 프로토콜로는 HTTP, HTTPS, SOCKS가 가장 널리 사용됩니다. PowerShell 5.1의 Invoke-WebRequest는 HTTP만 지원하지만, PowerShell 7.x에서는 HTTPS와 SOCKS도 지원합니다.
유효한 HTTP 프록시를 찾아볼 시간입니다!
아래와 같이 온라인에서 무료로 찾을 수 있습니다:
프로토콜: HTTP; IP 주소: 190.6.23.219; 포트: 999
해당 정보를 조합하여 다음과 같은 프록시 URL을 생성합니다:
http://190.6.23.219:999
경고
무료 프록시는 학습 목적으로는 괜찮지만, 실제 환경에서는 신뢰할 수 없습니다. 무료 프록시는 불안정하고 오류가 많으며 속도가 느리고 데이터 소모가 심하며 수명이 짧습니다. 사용하지 마세요!
해결책은? 시장 최고의 공급업체인 Bright Data의 프리미엄 프록시입니다. 구독하고 신뢰할 수 있는 프록시를 무료로 사용해 보세요.
Bright Data 프록시는 인증으로 보호되어 신뢰할 수 있는 사용자만 접근할 수 있습니다. 이제 프로토콜이 HTTP, 호스트가 45.103.203.109, 포트가 9571, 인증 정보 쌍이 admin-4521과 rUuH3tJqf라고 가정해 보겠습니다. 이 경우 Invoke-WebRequest 프록시 URL은 다음과 같습니다:
http://admin-4521:@rUuH3tJqf45.103.203.109:9571
Invoke-WebRequest에서 HTTP 프록시 지정 방법
시작하기 전에 PowerShell에서 아래 명령을 실행하세요:
Invoke-WebRequest "https://httpbin.org/ip"
그러면 다음과 같은 결과가 출력됩니다:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "194.34.233.12"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 32
Content-Type: application/json
Date: Thu, 01 Feb 2024 10:46:14 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 32]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 32
콘텐츠 필드에 주목하세요. 여기에 귀하의 IP가 포함됩니다.
왜냐하면 HTTPBin 프로젝트의 /ip 엔드포인트는 요청의 원본 IP를 반환하기 때문입니다. 즉, 요청을 수행한 머신의 IP 주소를 반환합니다. 이 경우, 그것은 여러분 머신의 IP입니다.
Content 필드만 접근하려면 다음을 사용하세요:
$response = Invoke-WebRequest "https://httpbin.org/ip"
$response.Content
이렇게 하면 다음과 같이 출력됩니다:
{
"origin": "194.34.233.12"
}
해당 요청을 프록시를 통해 라우팅하면 사용자의 IP 주소가 아닌 프록시 서버의 IP 주소가 표시됩니다. 따라서 이 엔드포인트 호출은 지정된 PowerShell Invoke-WebRequest 프록시가 예상대로 작동하는지 확인하는 좋은 테스트 방법입니다.
Invoke-WebRequest에서 PowerShell 프록시를 설정하는 방법은 여러 가지가 있습니다. 아래 단계별 안내 섹션에서 자세히 알아보세요!
명령줄 옵션 사용
Invoke-WebRequest는 요청에 대한 프록시 URL을 지정하는 -Proxy 플래그를 제공합니다.
따라서 프록시 서버와 함께 Invoke-WebRequest를 사용하는 구문은 다음과 같습니다:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>
이제 다음 PowerShell 명령을 실행해 보세요:
Invoke-WebRequest -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
Invoke-WebRequest -Uri "http://httpbin.org/ip" -Proxy "http://brd.superproxy.io:22225" -ProxyCredential (New-Object System.Management.Automation.PSCredential("brd-customer-CUSTOMER_ID-zone-ZONE’S_NAME", ("ZONE’S_PASSWORD" | ConvertTo-SecureString -AsPlainText -Force)))
결과는 다음과 같아야 합니다:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "190.6.23.219"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
Content의 원본이 프록시 서버 IP와 일치함을 확인하세요. 이는 대상 서버가 예상대로 요청을 프록시에서 온 것으로 인식함을 증명합니다. 훌륭합니다!
참고: 무료 프록시는 수명이 짧다는 점을 잊지 마세요! 이 가이드를 읽는 시점에는 위 서버가 여전히 작동할 가능성이 낮습니다. 오류가 발생하면 새로운 프록시로 교체하세요.
환경 변수 사용
PowerShell 7.0부터 Invoke-WebRequest는 환경 변수를 통한 프록시 구성을 지원합니다.
따라서 Invoke-WebRequest에서 PowerShell 프록시를 사용하는 또 다른 방법은 다음 두 환경 변수를 설정하는 것입니다:
- HTTP_PROXY: HTTP 요청 시 사용할 프록시 서버의 URL.
- HTTPS_PROXY: HTTPS 요청 시 사용할 프록시 서버의 URL.
Windows에서는 다음 PowerShell 구문을 사용하여 두 환경 변수를 설정할 수 있습니다:
$env:HTTP_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
$env:HTTPS_PROXY = "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
이 예시에서 명령어는 다음과 같이 변경됩니다:
$env:HTTP_PROXY = "http://190.6.23.219:999"
$env:HTTPS_PROXY = "http://190.6.23.219:999"
macOS 및 Linux에서는 아래 구문을 사용해야 합니다:
export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
따라서 두 명령어는 다음과 같습니다:
export http_proxy="http://190.6.23.219:999"
export https_proxy="http://190.6.23.219:999"
이제부터 모든 Invoke-WebRequest 요청은 -Proxy 옵션을 추가하지 않아도 지정된 프록시를 통해 전송됩니다. 환경 변수를 설정한 후 아래 명령을 실행하세요:
Invoke-WebRequest "https://httpbin.org/ip"
이전과 동일한 결과를 얻을 수 있습니다:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "190.6.23.219"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:36:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
Invoke-WebRequest 프록시를 비활성화하려면 다음 명령으로 환경 변수를 해제하세요:
$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""
또는 macOS 및 Linux에서:
unset HTTP_PROXY
unset HTTPS_PROXY
Invoke-WebRequest는 표준 동작으로 복귀하며, https://httpbin.org/ip는 이제 사용자의 IP를 노출합니다.
PowerShell에서 HTTPS 및 SOCKS 프록시 사용 방법
HTTPS 또는 SOCKS 프록시를 사용해야 하는 경우 PowerShell 7.x 이상 버전으로 업그레이드해야 합니다. 그렇지 않으면 Invoke-WebRequest가 다음 오류로 실패합니다:
Invoke-WebRequest: ServicePointManager는 https 스킴의 프록시를 지원하지 않습니다.
SOCKS 프록시의 경우:
Invoke-WebRequest: ServicePointManager는 socks 방식의 프록시를 지원하지 않습니다.
PowerShell 7.x에서 HTTPS 또는 SOCKS 프록시를 다룰 때 Invoke-WebRequest 명령어 구조는 동일하게 유지됩니다:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>
변경된 점은 <PROTOCOL>이 http 대신 https, socks4, socks4a, socks5 또는 socks5a로 지정된다는 것입니다.
위에서 언급된 프로토콜이 아닌 다른 프로토콜을 사용하는 프록시로 요청을 호출하려고 하면 다음과 같은 오류가 발생합니다:
Invoke-WebRequest: 프록시에는 'http', 'https', 'socks4', 'socks4a' 및 'socks5' 스킴만 허용됩니다.
따라서 Invoke-WebRequest SOCKS 프록시 요청의 완전한 예시는 다음과 같습니다:
Invoke-WebRequest -Proxy "socks5://94.14.109.54:3567" "http://httpbin.org/ip"
예상대로 결과는 다음과 같습니다:
StatusCode : 200
StatusDescription : OK
Content : {
"origin": "94.14.109.54"
}
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 31
Content-Type: application/json
Date: Thu, 01 Feb 2024 12:47:56 GMT...
Forms : {}
Headers : {[Connection, keep-alive], [Access-Control-Allow-Origin, *], [Access-Control-Allow-Credentials,
true], [Content-Length, 31]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 31
알아두면 좋은 팁과 요령
PowerShell Invoke-WebRequest 프록시를 전문가처럼 다루는 유용한 트릭과 가치 있는 팁을 확인하세요.
PowerShell 프록시 구성 무시하기
환경 변수에서 읽은 구성된 PowerShell 프록시를 Invoke-WebRequest가 사용하지 않도록 하려면 다음과 같이 -NoProxy 옵션을 사용할 수 있습니다:
Invoke-WebRequest -NoProxy <Uri>
이렇게 하면 Invoke-WebRequest가 프록시 없이 <Uri>에 직접 연결합니다.
이 방법이 제대로 작동하는지 확인하려면 환경 변수에 프록시를 설정하고 다음을 실행하세요:
Invoke-WebRequest -NoProxy "https://httpbin.org/ip"
결과적으로 표시되는 원본(Origin)에는 프록시 서버의 IP가 아닌 사용자의 IP가 포함됩니다.
SSL 인증서 오류 방지
HTTP 프록시를 사용할 때 SSL 인증서 오류로 인해 요청이 실패할 수 있습니다. 이를 방지하려면 -SkipCertificateCheck 옵션을 지정하세요:
Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>
-SkipCertificateCheck는 보안되지 않은 서버 연결을 허용하여 인증서 오류를 피할 수 있게 합니다. 이 매개변수 사용은 안전하지 않다는 점을 명심하십시오. 알려진 호스트를 다룰 때만 설정하십시오.
예를 들어, 다음 명령을 사용하면 SSL 문제를 우회하면서 프록시를 통해 HTTPBin에 연결할 수 있습니다:
Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"
어떤 PowerShell 프록시를 사용해야 할까요?
이 질문에 대한 답은 Invoke-WebRequest 요청으로 달성하려는 목표에 따라 달라집니다. 요구 사항에 맞는 PowerShell 프록시를 찾으려면 사용 가능한 다양한 프록시 유형을 살펴보세요:
- 데이터센터 프록시: 빠르고 저렴하지만 식별 가능한 IP 범위로 인해 사이트에 쉽게 탐지 및 차단될 수 있습니다.
- 주거용 프록시: 특정 지역의 실제 기기에서 회전하는 진짜 IP 주소를 제공합니다. 이는 높은 수준의 익명성을 보장할 수 있음을 의미합니다. 주거용 프록시는 지역 제한 차단에 의존하는 사이트에 접근하거나 봇 방지 조치를 피하는 데 완벽합니다.
- ISP 프록시: ISP에 등록된 기기의 고정 IP를 제공하므로 안전하고 빠르며 매우 안정적입니다. 주거용 고정 프록시라고도 불리며, SEO 모니터링 및 시장 조사에 완벽한 솔루션입니다.
이것은 간략한 요약일 뿐이며, 프록시 IP 유형에 대한 가이드에서 더 자세히 확인할 수 있습니다.
결론
이 PowerShell 프록시 가이드에서는 Invoke-WebRequest의 정의, 작동 방식, HTTP/HTTPS/SOCKS 프록시와의 사용법을 배웠습니다. 결과적으로 무료 제공업체의 프록시는 신뢰할 수 없습니다. 따라서 유일한 선택은 어떤 프록시 제공업체를 채택할지 결정하는 것입니다. 시간과 노력을 절약하고 시장 최고의 Bright Data를 바로 선택하세요.
Bright Data는 포춘 500대 기업 및 20,000명 이상의 고객에게 서비스를 제공하는 세계 최고의 프록시 서버를 운영합니다. 전 세계 프록시 네트워크는 다음과 같습니다:
- 데이터센터 프록시 – 77만 개 이상의 데이터센터 IP.
- 주거용 프록시 – 195개국 이상에 걸쳐 7,200만 개 이상의 주거용 IP.
- ISP 프록시 – 70만 개 이상의 ISP IP 주소.
종합적으로, 이는 시장에서 가장 크고 신뢰할 수 있는 스크래핑 전용 프록시 네트워크 중 하나입니다.