Skip to content

PowerShell Invoke-WebRequest を使用して HTTP、HTTPS、および SOCKS 接続でプロキシを利用するためのガイドです。セットアップ、ヒント、プロキシタイプの比較を含みます。

Notifications You must be signed in to change notification settings

bright-jp/Invoke-web-request-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 

Repository files navigation

PowerShell Invoke-WebRequest プロキシガイド

Promo

この Invoke-WebRequest PowerShell プロキシガイドの最後には、以下が分かるようになります:

  1. PowerShell Invoke-WebRequest とは?
  2. Invoke-WebRequest のインストール
    2.1. Windows
    2.2. macOS と Linux
  3. PowerShell でプロキシを開始するための前提条件
  4. Invoke-WebRequest で HTTP プロキシを指定する方法
    4.1. コマンドラインオプションを使用する
    4.2. 環境変数を使用する
  5. PowerShell で HTTPS および SOCKS プロキシを使用する方法
  6. 知っておくべき Tips と Tricks
    6.1. PowerShell のプロキシ設定を無視する
    6.2. SSL 証明書エラーを回避する
  7. どの PowerShell プロキシを使うべきか?

さっそく始めましょう!


What Is PowerShell Invoke-WebRequest?

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>

Installing Invoke-WebRequest

Invoke-WebRequest を使用するには PowerShell が必要です。PowerShell をインストールして Invoke-WebRequest cmdlet にアクセスする方法を見ていきましょう!

Windows

まず、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 の現在のバージョンは、次で確認できます:

$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 and Linux

PowerShell 7.x は macOS と Linux の両方にインストールできます。ただし、Invoke-WebRequest cmdlet にアクセスするだけのために、これらの OS に PowerShell エコシステム全体をインストールするのは、あまり合理的ではありません。代わりに、macOS と多くの Linux ディストリビューションにプリインストールされており、同等の機能を提供する curl を使用できます。詳しくは curl プロキシガイド をご覧ください。

Prerequisites to Get Started with a Proxy in PowerShell

プロキシは、クライアントと宛先サーバーの間に入る中継役として機能します。リクエストを傍受してサーバーへ転送し、レスポンスを受け取ってあなたに返します。これにより、宛先サーバーはリクエストがあなたからではなく、選択したプロキシサーバーの 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

How to Specify an HTTP Proxy in Invoke-WebRequest

開始する前に、次を実行してください:

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

Content フィールドに注目してください。ここには あなたの 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 プロキシを設定する方法はいくつかあります:

Using a Command Line Option

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: 無料プロキシは寿命が短いです。これが失敗する場合は、別のものを選んでください。

Using Environment Variables

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 を表示します。

How To Use HTTPS and SOCKS Proxies in PowerShell

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 : 31

Tips and Tricks You Need to Know

PowerShell Invoke-WebRequest プロキシをプロのように使いこなすための便利なテクニックをご紹介します。

Ignore the PowerShell Proxy Configuration

設定済みの環境変数プロキシをスキップするには -NoProxy を使用します:

Invoke-WebRequest -NoProxy <Uri>

これにより、プロキシなしで <Uri> に接続します。

環境変数にプロキシを設定したうえで、次を実行して確認してください:

Invoke-WebRequest -NoProxy "https://httpbin.org/ip"

プロキシの IP ではなく、あなたの IP が表示されます。

Avoid SSL Certificate Errors

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"

Which PowerShell Proxy Should You Use?

Invoke-WebRequest での目的によって異なります。主なプロキシタイプを検討してください:

  • Datacenter proxies: 高速で安価ですが、識別されるとブロックされやすいです。
  • Residential proxies: デバイス由来の実在 IPアドレス をローテーションします。ジオブロックされたコンテンツやアンチボット回避に最適です。
  • ISP proxies: ISP 由来の安全で高速なスタティックプロキシIPです。SEO や市場調査に理想的です。
  • Mobile proxies: 実在のモバイルデバイスで、モバイル特有のアプリ/サイトに最適です。

さらに詳しくは、プロキシ IP タイプのガイド をご覧ください。

About

PowerShell Invoke-WebRequest を使用して HTTP、HTTPS、および SOCKS 接続でプロキシを利用するためのガイドです。セットアップ、ヒント、プロキシタイプの比較を含みます。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published