cURLでプロキシを使用する方法

この詳細なガイドとコードスニペットを使って、プロキシを使ったcURLの活用を今すぐ始めましょう。
3 分読
How to Use cURL With Proxy blog image

この記事では、以下について解説します:

  • curlとは何か
  • curlのインストール方法。
  • プロキシを使い始めるために必要なもの
  • curlでHTTP/HTTPSプロキシを指定する方法。
  • curlでSOCKSプロキシを設定する方法
  • 知っておくべきコツとテクニック
  • curlに最適なプロキシはどれか?

cURLとは?

cURL(「Client URL」の略)は、URLを使ってインターネット上でデータを送受信するためのツールです。ソフトウェアプロジェクトとして、ライブラリ(libcurl)とコマンドラインツール(curl)の両方を提供しています。ここでは、URL構文を介してデータを転送するコマンドラインツールであるcurlに焦点を当てます。 

このプロジェクトは、HTTP、HTTPS、FTP、FTPS、SFTP、POP3、POP3S、IMAP、IMAPS、LDAP、LDAPS、SCPなど、幅広いプロトコルをサポートしています。これにより、curlは世界で最も人気があり広く使われているコマンドラインHTTPクライアントとなっています。 

cURLは非常に汎用性が高く、HTTPリクエストの実行、ファイルのダウンロード、データのアップロード、APIとのやり取りなど、さまざまなタスクを実行するための一般的なソリューションです。リクエストのカスタマイズからプロキシのサポートまで、いくつもの機能を備えています。

curlのインストール

では、お使いのマシンにcurlをインストールする方法を見ていきましょう。

macOS

macOSではcurlをインストールする必要はありません。このツールはすでにオペレーティングシステムに含まれており、ターミナルアプリケーションでそのまま使用できます。

Windows

Windows 10以降、Windowsにはcurlのコピーが同梱されています。同時に、curlコマンドはPowerShellのInvoke-WebRequestコマンドのエイリアスになっています。つまり、Windowsターミナルでのcurlコマンドは、裏でInvoke-Requestを呼び出すことになります。これを避けて実際にcURLのcurlを使用するには、「curl」を「curl.exe」に置き換えてください。こうすることで、PowerShellはInvoke-Requestではなくcurlを実行します。

例えば、お使いのWindowsマシンにインストールされているcurlの現在のバージョンは、ターミナルで次のように確認できます:

curl.exe --version

それにより、次のような内容が表示されるはずです:

curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN

Release-Date: 2023-03-20

Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp

Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Windowsユーザーの場合は、記事内のコマンドにある「curl」のすべてのインスタンスを「curl.exe」という文字列に置き換えてください。または、Windows Subsystem for Linux(WSL)をセットアップして、以下の手順に従ってください。

Linux

Linuxでは、使用している特定のディストリビューションによってcurlのインストール手順が異なります。UbuntuやFedoraなど人気のLinuxディストリビューションには、デフォルトで同梱されています。そのため、ターミナルで直接curlを使用できます。

他のディストリビューションでは、curlが含まれていない場合があります。その場合は、ディストリビューションのパッケージマネージャーを使って追加できます。Debianベースのオペレーティングシステムでは、次のコマンドでcurlをインストールできます:

sudo apt-get install curl

curlでプロキシを使用するために必要なもの

プロキシは、クライアントと宛先サーバーの間の仲介役として機能します。クライアントからのリクエストを傍受し、サーバーに転送し、サーバーからのレスポンスを受け取り、クライアントに送り返します。この仲介アプローチにより、匿名性が高まり、ネットワーク制限を回避するのに役立ちます。これは、宛先サーバーがリクエストを、あなたからではなく、選択したプロキシサーバーのIPと場所から来ているものとして認識するためです。

curlをプロキシサービスとともに使い始めるには、まずプロキシへのアクセスが必要です。具体的には、プロキシURLの構文は以下の通りです:

[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

これは以下で構成されます:

  • <PROTOCOL>: プロキシサーバーへの接続に使用するプロトコル。プロトコルが指定されていない場合、curlはデフォルトでhttp://を使用します。
  • <HOST>: プロキシサーバーのホスト名の必須IPアドレスまたはURL。
  • <PORT>: プロキシサーバーが待ち受けているポート番号。ポートが指定されていない場合、curlはデフォルトで1080を使用します。
  • <USERNAME>: 認証が必要な場合に指定する任意のユーザー名。
  • <PASSWORD>: 認証が必要な場合に指定する任意のパスワード。

プロキシプロトコルについては、最も人気があるのはHTTPとHTTPSで、次にSOCKSが続きます。

では、有効なHTTPプロキシを取得しましょう!

以下のように、Free Proxy Listで無料のものを入手できます:

IP Address: 71.19.249.97; Port: 8443

つまり、プロキシURLは次のようになります:

http://71.19.249.97:8443

学習目的であればこのような方法で問題ありませんが、実際の現場では頼ることはできません。無料のプロキシサービスは信頼性が低く、エラーが起きやすく、遅く、データを大量に消費し、寿命も短いです。使用しないでください!

解決策は?市場で最高のプロバイダーであるBright Dataのプレミアムプロキシです。アカウントを作成して、信頼性の高いプロキシをお試しください。

プレミアムソリューションは認証によって保護されていることに注意してください。プロトコルがHTTP、ホストが71.103.203.109、ポートが9321、認証情報のペアがadmin-32458とrTuJ3tEwfだとします。この場合、curlのプロキシURLは次のようになります:

http://admin-32458:@rTuJ3tEwf71.103.203.109:9321

curlでHTTP/HTTPSプロキシを指定する方法

始める前に、ターミナルで以下のコマンドを実行してください:

curl "https://httpbin.org/ip"

ご覧の通り、基本的なcurlの構文は次の通りです:

curl [optional_commands] <URL>

curlのベストプラクティスとして、特殊文字に関する問題を避けるため、URLを二重引用符で囲むことが推奨されます。

実行すると、次のような結果が得られるはずです:

{

  "origin": "194.33.243.7"

}

HTTPBinプロジェクトでは、あなたのHTTPリクエストに関する情報を取得できます。詳しくは、/ipエンドポイントはリクエストの発信元IP、つまりリクエストを実行したマシンのIPアドレスを返します。言い換えれば、あなたのIPを返します。 

curlでプロキシを設定した後は、あなたのIPではなく、プロキシサーバーのIPアドレスが表示されるはずです。

curlでプロキシを設定する方法はいくつかあります。では、curlでHTTP/HTTPSプロキシを指定するための最も一般的な方法を見ていきましょう。

コマンドライン引数を使用する

curlは、プロキシURLを設定するための2つのコマンドライン引数を提供しています:

  • -x
  • --proxy

この2つはまったく同じことをするため、互換的に使用できます。後者は前者の単なるエイリアスです。

したがって、curlをプロキシサービスとともに使用する構文は次のようになります:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

または:

curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

注意:curlのコマンドラインオプションは大文字小文字を区別します。例えば、-xと-Xは異なる意味を持ちます。

今、以下を実行すると:

curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"

または同等のもの:

curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"

次のような結果が得られるはずです:

{

  "origin": "71.19.249.97"

}

発信元がプロキシサーバーのIPと一致しています。つまり、ターゲットサイトは、希望通り、プロキシから来たリクエストとして認識します。素晴らしい!

無料プロキシは寿命が短いので、あなたがこの記事を読む頃には上記のサーバーが生きていない可能性が高いことをお忘れなく。エラーが発生した場合は、新しいプロキシに置き換えてください。

環境変数を使用する

curlでプロキシを使用するもう一つの方法は、以下の2つの環境変数を設定することです:

  • http_proxy:HTTPプロトコルを含むURLにアクセスするために使用するプロキシサーバーのURL。
  • https_proxy:HTTPプロトコルを含むURLにアクセスするために使用するプロキシサーバーのURL。

macOSとLinuxでは、以下の構文でこれら2つの環境を設定できます:

export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

したがって、2つのコマンドは次のようになります:

export http_proxy="http://71.19.249.97:8443"

export https_proxy="http://71.19.249.97:8443"

Windowsでは、以下のPowerShell構文を使用する必要があります:

$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

そして、私たちの例では:

$env:http_proxy = "http://71.19.249.97:8443"

$env:https_proxy = "http://71.19.249.97:8443"

これ以降、すべてのcurlコマンドは、-xオプションを使用することなく、指定されたプロキシを経由するようになります:

再度、これは次を返します:

curl https://httpbin.org/ip

{

  "origin": "71.19.249.97"

}

curlプロキシをオフにするには、以下で環境変数を解除します:

unset http_proxy

unset https_proxy

またはWindowsでは:

$env:http_proxy = ""

$env:https_proxy = ""

curlは標準の動作に戻り、https://httpbin.org/ipは今度はあなたのIPを返します。

設定ファイルを使用する

.curlrc設定ファイルを作成することで、curlにグローバルにプロキシを指定できます。

LinuxとmacOSでは、ターミナルを開き、ホームディレクトリに移動します:

cd ~

次に、nanoで.curlrcにアクセスします:

nano .curlrc

ファイルがすでに存在する場合は開かれます。そうでなければ、まず作成されてから開かれます。

以下の行を.curlrcファイルに追加します:

proxy="http://71.19.249.97:8443"

この命令の構文は次の通りです:

proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

ファイルを保存し、ターミナルを閉じて再起動してください。 

Windowsでは、%APPDATA%ディレクトリ内に同じ内容の_curlrcファイルを作成する必要があります。ファイルエクスプローラーのアドレスバーに%APPDATA%を貼り付けてENTERキーを押し、ディレクトリにアクセスしてください。 

これにより、C:Users<YOUR_USER>AppDataRoamingに移動するはずです。

これで、curlは設定ファイルで指定されたプロキシを自動的に使用します:

curl "http://httpbin.org/ip"

次が得られます:

{

  "origin": "71.19.249.97"

}

素晴らしい!これで、3つの異なる方法でcurlをプロキシサーバーと一緒に使用する方法を学びました!

curlでSOCKSプロキシを設定する方法

SOCKsプロキシを使用したい場合、コマンド構造は同じままです:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

主な違いは、<PROTOCOL>がhttpとhttpsの代わりに、socks4、socks4a、socks5、またはsocks5hになることです。

curlSOCKSプロキシが実際に機能する完全な例は以下の通りです:

curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"

予想通り、結果は次のようになります:

{

  "origin": "94.14.109.54"

}

別のアプローチでは、-xの代わりに--socks4、--socks4a、--socks5コマンドラインオプションを使用します。この場合、オプションの後にユーザー名とパスワードなしでプロキシURLを設定し、その後--proxy-userの後に認証情報を設定する必要があります:

curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>

例えば:

curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3

これは、93.16.238.41:8721 socks4プロキシを介してHTTPBinに接続し、認証用のユーザー名としてadmin334、パスワードとしてkv4NsDgc3を使用します。

知っておくべきコツとテクニック

このセクションでは、プロのようにcurlプロキシを扱うための興味深いテクニックと貴重なヒントをご紹介します。

プロキシのオン・オフを素早く切り替える

ここでのアイデアは、カスタムコマンドを使用して環境変数経由でプロキシをプログラム的に設定・解除するエイリアスを定義することです。 

macOSとLinuxでは、.bashrcファイルを作成することでこれを実現できます。これは、ユーザーがログインするたびに実行されるスクリプトファイルです。

ホームフォルダに移動します:

cd ~

次に、.bashrcファイルを作成または開きます:

nano .bashrc

以下の形式でファイルに内容を追加します:

alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"

したがって、私たちの例では次のようになります:

alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"

alias proxyoff="unset http_proxy;unset https_proxy"

ファイルを保存し、マシンを再起動してください。

これで、以下のコマンドでcurlプロキシを有効化・無効化できます:

proxyon

curl "http://httpbin.org/ip"

# other HTTP requests...

proxyoff

カスタムのproxyonとproxyoffコマンドに注目してください。これらは、.bashrcファイル内のエイリアスで指定された操作を実行します。

Windowsでは、PowerShellのエイリアスで同様のことを実現できます。

単一のリクエストでプロキシを無視する

特定のリクエストで設定済みのプロキシをcurlに使用させたくない場合は、以下のように--noproxy "*“引数を使用できます:

curl --noproxy "*" <URL>

これにより、curlにすべてのURLに対してプロキシを使用しないよう指示します。

プロキシを設定して実行します:

curl --noproxy "*" "https://httpbin.org/ip"

結果として得られる発信元には、プロキシサーバーのIPではなく、あなたのIPが含まれます。

SSL証明書エラーを回避する

curlでプロキシを使用する際、SSL証明書エラーによりリクエストが失敗することがあります。これを避けるには、以下の構文のように-kオプションを使用します:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>

-kは、SSL経由の安全でないサーバー接続を許可することで、証明書エラーを回避するのに役立ちます。

例えば、SSLの問題を回避してHTTPBinに連絡できます:

curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"

リクエストに関する詳細情報を取得する

curlのリクエストが失敗した場合、何が起こったのかを理解するのは容易ではありません。エラーを診断し、curlによって実行されたすべての操作を確認するには、-vオプションを設定します:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>

これにより、確立された接続の詳細と、ツールが使用したヘッダーが出力されます:

$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"

*   Trying 71.19.249.97:8443...

* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)

* allocate connect buffer

* Establish HTTP proxy tunnel to httpbin.org:443

> CONNECT httpbin.org:443 HTTP/1.1

> Host: httpbin.org:443

> User-Agent: curl/8.0.1

> Proxy-Connection: Keep-Alive

>

< HTTP/1.0 200 OK

<

* CONNECT phase completed

* CONNECT tunnel established, response 200

* schannel: disabled automatic use of client certificate

* ALPN: offers http/1.1

* ALPN: server accepted http/1.1

* using HTTP/1.1

> GET /ip HTTP/1.1

> Host: httpbin.org

> User-Agent: curl/8.0.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Sat, 26 Aug 2023 10:39:13 GMT

< Content-Type: application/json

< Content-Length: 31

< Connection: keep-alive

< Server: gunicorn/19.9.0

< Access-Control-Allow-Origin: *

< Access-Control-Allow-Credentials: true

<

{

  "origin": "71.19.249.97"

}

* Connection #0 to host 71.19.249.97 left intact

curlに最適なプロキシはどれか?

この質問への答えは、あなたのユースケースと、実行する必要があるcurlリクエストの性質によって異なります。あなたのニーズに合った適切なソリューションを見つけるために、利用可能なさまざまな種類のプロキシを見てみましょう:

  • データセンター・プロキシ:高速ですが、識別可能なIP範囲のため、サイトによって検出されブロックされやすい場合があります。
  • レジデンシャルプロキシ:特定の場所にある実際のデバイスからのIPアドレスを提供するため、高いレベルの匿名性を保証します。レジデンシャルプロキシは、地理的制限ブロックやアンチボット対策に依存するサイトへのアクセスや、curlでのウェブスクレイピングの実行に最適です。
  • ISPプロキシ:ISPに登録されたデバイスのIPを提供するため、高速かつ安全で、高い信頼性を持っています。ISPプロキシは、SEO監視、ウェブブラウジング、市場調査に最適なソリューションです。

これは簡単な要約に過ぎませんが、詳しくはプロキシIPタイプガイドをご覧ください。

結論

このcurlプロキシガイドでは、cURLとは何か、何を提供するか、そしてHTTP/HTTPS/SOCKSプロキシを設定する方法を学びました。結局のところ、無料プロバイダーのプロキシサービスを備えたcurlに頼ることはできません。したがって、主な技術的決定は、どのプロキシプロバイダーを採用するかです。時間とエネルギーを節約するために、市場で最高のBright Dataを選びましょう。

Bright Dataは、Fortune 500企業や50,000+のお客様にサービスを提供する、世界最高のプロキシサーバーを管理しています。その世界的なプロキシネットワークには以下が含まれます:

全体として、これは市場で最大かつ最も信頼性の高いスクレイピング指向のプロキシネットワークの1つです。今すぐ最大のプロキシネットワークに参加しましょう!