この記事では説明すること:
- cURLとは
- curlのインストール。
- プロキシを使い始めるのに必要なもの
- curlでHTTP/HTTPSプロキシを指定する方法。
- curlでSOCKSプロキシを設定する方法
- 知っておくべきヒントや小技
- curlにはどのようなプロキシが最適なのか
cURLとは
cURLは「Client URL」の略で、URLを使用してインターネット上でデータを送受信するためのツールです。ソフトウェアとしては、ライブラリ(libcurl
)とコマンドラインツール (curl
) の両方が提供されています。この記事では、URLシンタックスを使ってデータを転送するためのコマンドラインツール、curl
に焦点を当てます。
curlはHTTP、HTTPS、FTP、FTPS、SFTP、POP3、POP3、POP3S、IMAP、IMAPS、LDAP、LDAPS、SCPなどを含む幅広いプロトコルをサポートしています。そのため、 curl
は世界で最も人気があり、広く使用されているコマンドライン型HTTPクライアントとなっています。
cURLは非常に汎用性が高く、HTTPリクエストの作成、ファイルのダウンロード、データのアップロード、APIとのやり取りなど、さまざまなタスクを実行できる汎用ソリューションです。cURLにはリクエストのカスタマイズやプロキシサポートなど、様々な機能が備わっています。
curl
のインストール
コンピューターにcurl
をインストールする方法を学びましょう。
macOS
macOSの場合、curl
をインストールする必要はありません。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」文字列に書き換えてください。インスタンスを書き換えたくない方は、Linux用Windowsサブシステム(WSL)をセットアップし、以下の手順に従ってください。
Linux
Linuxでcurl
をインストールする手順は、使用しているディストリビューションによって異なります。UbuntuやFedoraなどの人気のあるLinuxディストリビューションには、curlがデフォルトで付属しています。そのため、 curl
をターミナルでそのまま使用できます。
その他のディストリビューションには、curl
が含まれない場合があります。その場合も、ディストリビューションパッケージマネージャーを使用して追加できます。DebianベースのOSでは、次のコマンドで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アドレスのことです。つまり、使用中のコンピューターの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
の意味は異なり、2つの別々のコマンドになります。
次のコマンドを実行する。
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と一致しています。これは目標通り、目的のサイトがリクエストをプロキシからのものとして認識していることを示します。お見事です!
無料のプロキシは存続期間が短いため、この記事を読み終わる前に上記のサーバーが停止してしまっている可能性が高いことに注意してください。エラーが発生した場合は、新しいプロキシに切り換えてください。
環境変数の使用
次の2つの環境変数を設定することでも、curl
でプロキシを使用できるようになります。
http_proxy
:HTTPプロトコルを使ってURLへのアクセスするのに使用するプロキシサーバーのURL。https_proxy
:HTTPSプロトコルを使って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
またはウィンドウズの場合。
$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の場合、同じ内容の_curlrc
ファイルを%APPDATA%
ディレクトリ内に作成する必要があります。ファイルエクスプローラーのアドレスバーに%APPDATA%
と貼り付け、Enterキーを押してディレクトリにアクセスします。
これでC:\Users\<YOUR_USER>\AppData\Roaming
に移動するはずです。
これより、curl
が設定ファイルで指定されたプロキシを自動的に使用するようになります。
curl "http://httpbin.org/ip"
次のようになります:
{
"origin": "71.19.249.97"
}
素晴らしい!これで、curl
でプロキシサーバーを使用する3つの異なる方法を学習することができました。
curlでSOCKSプロキシを設定する方法
SOCKsプロキシを使用する場合も、コマンドの構造は同じです。
curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>
主な違いとなるのは<PROTOCOL>
がhttp
やhttps
の代わりに、socks4
、またはsocks4a
、socks5
、socks5h
になることです。
curl
SOCKSプロキシの実行例の全体は次の通りです。
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が確立した接続と使用したヘッダーに関する詳細が表示されます。
$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モニタリング、Webブラウジング、および市場調査に最適なソリューションです。
- モバイルプロキシ:実際のモバイルデバイスのIPを使用するため、高い匿名性が実現されます。モバイルデバイス向けに設計されたアプリケーションやサイト、コンテンツにアクセスするのに便利です。
以上が簡単な概要になりますが、詳細についてはプロキシIPタイプガイドをご覧ください。
まとめ
このcurlプロキシガイドでは、cURL
とは何か、cURLで何ができるのか、そして HTTP/HTTPS/SOCKSプロキシの設定方法を学びました。上記の通り、無料プロバイダーのプロキシは頼りになりません。そのため、技術面で言えばどのプロキシプロバイダーを採用するのかが問題となります。市場大手のBright Dataを選んで、時間も手間も省きましょう。
Bright Dataは世界最高水準のプロキシサーバーを管理しており、フォーチュン500企業を含む2万社以上の顧客にサービスを提供しています。世界中に広がるプロキシネットワークで、以下のようなプロキシが提供されています。
- データセンタープロキシ — 77万個データセンターIP
- 住宅用プロキシ — 195か国以上で7200万個を超える住宅用IP
- ISPプロキシ — 70万個以上のISP用IP
- モバイルプロキシ — 700万個以上のモバイル用IP
総合的に見ても、Bright Dataはプロキシ業界で最大かつ最も信頼性の高いスクレイピング指向のプロキシネットワークの1つと言えます。業界最大のプロキシネットワークに参加して、無料トライアルを試してみましょう。
クレジットカードは必要ありません