この Invoke-WebRequest PowerShell プロキシガイドの最後には、以下が分かるようになります:
- PowerShell Invoke-WebRequest とは?
- Invoke-WebRequest のインストール
2.1. Windows
2.2. macOS と Linux - PowerShell でプロキシを開始するための前提条件
- Invoke-WebRequest で HTTP プロキシを指定する方法
4.1. コマンドラインオプションを使用する
4.2. 環境変数を使用する - PowerShell で HTTPS および SOCKS プロキシを使用する方法
- 知っておくべき Tips と Tricks
6.1. PowerShell のプロキシ設定を無視する
6.2. SSL 証明書エラーを回避する - どの PowerShell プロキシを使うべきか?
さっそく始めましょう!
Invoke-WebRequest は、Web サーバーや Web サービスに対して HTTP, HTTPS, FTP リクエストを送信するための PowerShell cmdlet です。デフォルトでは、サーバーが返すレスポンスを自動的に解析し、フォーム、リンク、画像、その他の重要な HTML 要素のコレクションを返します。
通常は、REST API へのアクセス、Web からのファイルダウンロード、または Web サービスとのやり取りに使用されます。以下は Invoke-WebRequest リクエストの基本構文です:
Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]覚えておくべき主要なパラメータ:
- Uri: リクエストの送信先となる Web リソースの URI です。
- Method: リクエストに使用する HTTP メソッドです(例:GET, POST, PUT, DELETE)。
- Invoke-WebRequest はデフォルトで GET リクエストを送信します。
- Headers: リクエストに含める追加の HTTP ヘッダーです。
- Body: サーバーへ送信するリクエストボディです。
ご覧のとおり、必須の引数は のみです。したがって、指定した URI に対して GET リクエストを実行する最もシンプルな構文は次のとおりです:
Invoke-WebRequest <Uri>Invoke-WebRequest を使用するには PowerShell が必要です。PowerShell をインストールして Invoke-WebRequest cmdlet にアクセスする方法を見ていきましょう!
まず、Windows PowerShell と PowerShell は別物であることを理解してください。Windows PowerShell は Windows に同梱されている PowerShell のバージョン(最新 5.1)です。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 の現在のバージョンは、次で確認できます:
$PSVersionTablePowerShell 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.0PowerShell 7.x は macOS と Linux の両方にインストールできます。ただし、Invoke-WebRequest cmdlet にアクセスするだけのために、これらの OS に PowerShell エコシステム全体をインストールするのは、あまり合理的ではありません。代わりに、macOS と多くの Linux ディストリビューションにプリインストールされており、同等の機能を提供する curl を使用できます。詳しくは curl プロキシガイド をご覧ください。
プロキシは、クライアントと宛先サーバーの間に入る中継役として機能します。リクエストを傍受してサーバーへ転送し、レスポンスを受け取ってあなたに返します。これにより、宛先サーバーはリクエストがあなたからではなく、選択したプロキシサーバーの IP とロケーションから来ているように見えます。
Invoke-WebRequest で PowerShell プロキシを使い始めるには、プロキシサーバー URL がどのような形かを理解する必要があります。
以下は PowerShell Invoke-WebRequest プロキシの URL です:
<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]構成要素は次のとおりです:
PROTOCOL: プロキシサーバーへ接続する際に使用するプロトコルです。HOST: プロキシサーバーのホスト名の IPアドレス または URL です。PORT: プロキシサーバーが待ち受けるポート番号です。USERNAME: プロキシ認証における任意のユーザー名です。PASSWORD: プロキシ認証における任意のパスワードです。
💡 Important:
Invoke-WebRequest では :// 部分が必須です。省略すると次のエラーでリクエストが失敗します:
Invoke-WebRequest : This operation is not supported for a relative URI.
PowerShell 5.1 では Invoke-WebRequest は HTTP のみをサポートしますが、PowerShell 7.x では HTTPS と SOCKS もサポートします。
有効な HTTP プロキシを取得する時間です!
例えば、無料のものならオンラインで次のように見つかります:
Protocol: HTTP; IP Address: 190.6.23.219; Port: 999
これを次のように組み立てます:
http://190.6.23.219:999
⚠️ Warning:
無料プロキシは信頼性が低く、エラーが多く、低速で、データを過剰に要求し、寿命も短いです。使用しないでください!
解決策は?市場で最高のプロバイダーである Bright Data のプレミアムプロキシです。登録して、信頼性の高いプロキシを無料でお試しください。
Bright Data’s proxy services は認証によって保護されており、信頼できるユーザーのみがアクセスできます。
次を前提とします:
Protocol: HTTP
Host: 45.103.203.109
Port: 9571
Username: admin-4521
Password: rUuH3tJqf
この場合、Invoke-WebRequest プロキシ URL は次のとおりです:
http://admin-4521:@rUuH3tJqf45.103.203.109:9571開始する前に、次を実行してください:
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 : 32Content フィールドに注目してください。ここには あなたの IP が含まれています。
なぜでしょうか?https://httpbin.org/ip は、リクエストの送信元 IP を返すためです。つまり、プロキシが設定されていなければ、あなたのマシンの IP になります。
Content フィールドだけが欲しい場合は次のとおりです:
$response = Invoke-WebRequest "https://httpbin.org/ip"
$response.Content次のように出力されます:
{
"origin": "194.34.233.12"
}このリクエストをプロキシ経由にすると、代わりにプロキシサーバーの IP が表示されます。これは、PowerShell Invoke-WebRequest が実際にプロキシを使用していることを確認するための優れたテストです。
Invoke-WebRequest で PowerShell プロキシを設定する方法はいくつかあります:
Invoke-WebRequest には -Proxy フラグがあります:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>つまり次のとおりです:
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:33335" `
-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ここでは、origin がプロキシサーバーの IP と一致しており、リクエストがプロキシ経由であることが分かります。完璧です!
Note: 無料プロキシは寿命が短いです。これが失敗する場合は、別のものを選んでください。
PowerShell 7.0 以降、Invoke-WebRequest は環境変数によるプロキシ設定をサポートします。
2 つの env を設定します:
HTTP_PROXY:HTTP リクエスト用のプロキシ URL。HTTPS_PROXY:HTTPS リクエスト用のプロキシ URL。
Windows の場合:
$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 呼び出しは自動的にこれらのプロキシを経由します。次を実行してください:
Invoke-WebRequest "https://httpbin.org/ip"origin に再びプロキシ IP が表示されます。完璧です。
これらのプロキシをオフにするには、解除します:
$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""macOS / Linux:
unset HTTP_PROXY
unset HTTPS_PROXYその後、Invoke-WebRequest "https://httpbin.org/ip" は再びあなたの IP を表示します。
HTTPS または SOCKS proxies を使用するには、PowerShell 7.x+ が必要です。そうでない場合、次のエラーになります:
Invoke-WebRequest : The ServicePointManager does not support proxies with the https scheme.
また、SOCKS の場合:
Invoke-WebRequest : The ServicePointManager does not support proxies with the socks scheme.
PowerShell 7.x では、構造は引き続き次のとおりです:
Invoke-WebRequest -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>ただし、<PROTOCOL> は http だけでなく、https, socks4, socks4a, socks5, socks5a を使用できます。
これら以外のプロトコルを試すと、次のエラーになります:
Invoke-WebRequest: Only the 'http', 'https', 'socks4', 'socks4a' and 'socks5' schemes are allowed for proxies.
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 : 31PowerShell Invoke-WebRequest プロキシをプロのように使いこなすための便利なテクニックをご紹介します。
設定済みの環境変数プロキシをスキップするには -NoProxy を使用します:
Invoke-WebRequest -NoProxy <Uri>これにより、プロキシなしで <Uri> に接続します。
環境変数にプロキシを設定したうえで、次を実行して確認してください:
Invoke-WebRequest -NoProxy "https://httpbin.org/ip"プロキシの IP ではなく、あなたの IP が表示されます。
HTTP プロキシの使用時に SSL 証明書エラーで失敗する場合があります。その場合は -SkipCertificateCheck を使用します:
Invoke-WebRequest -SkipCertificateCheck -Proxy "<PROTOCOL>://[<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]" <Uri>-SkipCertificateCheck は安全でないサーバー接続を許可します。安全ではないため、信頼できるホストに対してのみ使用してください。
例:
Invoke-WebRequest -SkipCertificateCheck -Proxy "http://190.6.23.219:999" "https://httpbin.org/ip"Invoke-WebRequest での目的によって異なります。主なプロキシタイプを検討してください:
- Datacenter proxies: 高速で安価ですが、識別されるとブロックされやすいです。
- Residential proxies: デバイス由来の実在 IPアドレス をローテーションします。ジオブロックされたコンテンツやアンチボット回避に最適です。
- ISP proxies: ISP 由来の安全で高速なスタティックプロキシIPです。SEO や市場調査に理想的です。
- Mobile proxies: 実在のモバイルデバイスで、モバイル特有のアプリ/サイトに最適です。
さらに詳しくは、プロキシ IP タイプのガイド をご覧ください。
