ブログに戻ります

プロキシを使用してcURLを利用する方法:HTTP、HTTPS、SOCKS5の例

James Thompson
James Thompson

Scraping and Proxy Management Expert

07-Aug-2026

TL;DR:

  • -x または --proxy を使用して、HTTP、HTTPS、またはSOCKSプロキシを介してcURLリクエストをルーティングします。 対象のURLをプロキシアドレスとは別に保管します。
  • HTTPS対象はHTTPSプロキシを必要としません。 HTTPプロキシは一般的にHTTPS宛てにCONNECTトンネルを作成します; https://プロキシURLは、クライアントからプロキシへのホップを追加的に暗号化します。
  • プロキシが対象のホスト名を解決すべきときはsocks5h://を使用してください。 プレーンsocks5://はローカルで解決し、DNSの動作が明らかになったり、プロキシ専用のホスト名で失敗する可能性があります。
  • URLやソースファイルに資格情報を含めないでください。 シェル変数を引用し、設定ファイルを保護し、実際のユーザー名、パスワード、またはゲートウェイトークンを公開しないでください。
  • 出口IPだけでなく、他の情報も確認してください。 ステータス、期待されるコンテンツ、場所、DNSの動作、そして認可された対象に対するプロキシではない制御リクエストを確認します。

cURLプロキシサポートは、ほとんどの開発者がHTTP診断に使用するコマンドに組み込まれています。単一のオプションで、必要に応じて認証やホスト除外ルールを使用して、HTTPゲートウェイ、HTTPSプロキシ、またはSOCKS5サーバーを介してリクエストをルーティングできます。

構文はシンプルです。ネットワークの動作はそうではありません。HTTPS対象はトンネルを使用し、SOCKS方式はDNS解決が行われる場所を決定し、環境変数はケースによって異なり、資格情報は不注意なコマンド履歴から漏洩する可能性があります。

このガイドは最小限のコマンドから始まり、macOS、Linux、Windowsで動作する構成を構築します。

Quick cURL Proxy Example

認可されたパブリックテスト対象と、あなたが制御するか使用を許可されたプロキシを使用します:

bash Copy
curl --proxy "http://proxy.example.com:8080" \
  --connect-timeout 10 \
  --max-time 30 \
  --show-error \
  "https://example.com/"

長いオプション--proxyと短いオプション-xは同等です。cURLコマンドラインリファレンスは、サポートされているプロキシスキーム、認証オプション、除外動作を文書化しています。

診断中に--verboseを追加して接続シーケンスを確認します。ヘッダーと接続の詳細が敏感な場合があるため、通常のログから冗長な出力を削除します。

How cURL Proxy URLs Work

プロキシオプションはスキーム、ホスト、およびポートを受け入れます:

scheme://proxy-host:port

一般的なスキームは次のとおりです:

  • http:// はHTTPプロキシ用です;
  • https:// はcURLとプロキシ間のTLS用です;
  • socks4://socks4a:// はSOCKS4のバリアント用です;
  • socks5:// はローカル対象名解決を伴うSOCKS5用です;
  • socks5h:// はプロキシ側の対象名解決を伴うSOCKS5用です。

対象のURLは最終的な引数として残ります。対象とプロキシを1つのURLに結合しないでください。

Use an HTTP Proxy With cURL

プレーンHTTP対象の場合、cURLはリクエストをプロキシを介して送信します。HTTPS対象の場合、通常はプロキシにHTTP CONNECTメソッドを使用してトンネルを開くように依頼し、そのトンネルを通じて宛先とTLSを行います。

bash Copy
# HTTP target through an HTTP proxy
curl -x "http://proxy.example.com:8080" "http://example.com/"

# HTTPS target through the same HTTP proxy
curl -x "http://proxy.example.com:8080" "https://example.com/"

2番目のコマンドは、宛先TLSでHTTPリクエストとレスポンスを保護します。トンネルが確立される前にクライアントとプロキシの接続自体は個別に暗号化されていないため、ローカルネットワークの観察者はプロキシ接続とトンネル宛先メタデータを見ることができます。

HTTP Semantics specificationは、トンネルを確立するために使用されるCONNECTメソッドを定義しています。

Use an HTTPS Proxy With cURL

HTTPSプロキシはcURLからプロキシへのホップを暗号化します。プロキシURLをhttps://でプレフィックスします:

bash Copy
curl --proxy "https://proxy.example.com:8443" \
  --proxy-cacert "/path/to/proxy-ca.pem" \
  "https://example.com/"

--proxy-cacertは、デフォルトの信頼ストアに発行CAが含まれていない場合にプロキシの証明書を確認するためのCAバンドルを提供します。--proxy-insecureを永久的な修正として使用しないでください; それはプロキシ証明書の確認を無効にします。

すべてのプロキシエンドポイントがTLSを受け入れるわけではありません。URLスキームとポートをプロバイダーのドキュメントに合わせてください。

Use a SOCKS5 Proxy With cURL

SOCKSプロキシはHTTPの下で動作し、いくつかのアプリケーションプロトコルを運ぶことができます。ウェブリクエストにおいて、重要な選択肢は対象ホスト名がどこで解決されるかです。

bash Copy
# Resolve example.com on the local machine
curl --proxy "socks5://proxy.example.com:1080" "https://example.com/"

# Send example.com to the proxy for resolution
curl --proxy "socks5h://proxy.example.com:1080" "https://example.com/"

# Equivalent long option for proxy-side hostname resolution
curl --socks5-hostname "proxy.example.com:1080" "https://example.com/"

対象ホスト名がローカルリゾルバによって解決されないべき場合、ホスト名がプロキシネットワークからのみ見える場合、またはローカルDNSが間違った地域結果を提供する場合はsocks5h://を使用してください。

Everything cURL SOCKS guideは、ローカルとプロキシの名前解決の区別を説明しています。プロトコル自体はRFC 1928で定義されています。

Authenticate to a Proxy Safely

プロキシURLに資格情報を埋め込む代わりに、--proxy-user または -U を使用します:

bash Copy
export PROXY_HOST="proxy.example.com"
export PROXY_PORT="8080"
export PROXY_USER="replace-with-user"
read -r -s -p "Proxy password: " PROXY_PASS
printf '\n'

curl --proxy "http://${PROXY_HOST}:${PROXY_PORT}" \
  --proxy-user "${PROXY_USER}:${PROXY_PASS}" \
  "https://example.com/"

unset PROXY_PASS

引用はスペース、ドル記号、感嘆符、その他のシェル文字が再解釈されるのを防ぎます。共有シェルコマンド、チケット、スクリーンショット、またはリポジトリに実際のパスワードを直接入力しないでください。
コマンドライン引数は、ローカルプロセス検査に可視化される場合があります。自動化のためには、短命の値を隔離されたジョブに注入するシークレットマネージャーを優先してください。cURL構成ファイルを使用する場合、その権限を制限し、バージョン管理の外に置いておいてください:

text Copy
proxy = "http://proxy.example.com:8080"
proxy-user = "replace-with-user:replace-with-password"
connect-timeout = 10
max-time = 30
show-error

macOSまたはLinuxでは、chmod 600 proxy.confで権限を設定し、その後curl --config proxy.conf https://example.com/を実行します。ファイルが公開された場合は、資格情報を削除または回転させてください。

プロキシ環境変数の設定

cURLは、プロキシルーティングを共有すべきアプリケーションのために環境変数を認識します:

bash Copy
export http_proxy="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
export ALL_PROXY="socks5h://proxy.example.com:1080"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"

curl "https://example.com/"

小文字のhttp_proxy形式は意図的です。cURLはその変数に対して小文字のみを受け入れるセキュリティ予防策として、他のプロキシ変数は大文字であってもよいです。ALL_PROXYはフォールバックとして機能します。プロトコル特有の変数が優先されます。

すべてのcURL環境変数ガイドは、ケースルールとNO_PROXYのマッチングを文書化しています。

制御されたジョブには環境変数を使用し、アクティブであることを忘れるグローバルデスクトップ設定として使用しないでください。リクエストが予期せずプロキシを使用している場合は、それらを検査してください。

選択したホストをプロキシルーティングから除外

1つのコマンドに--noproxyを使用します:

bash Copy
curl --proxy "http://proxy.example.com:8080" \
  --noproxy "localhost,127.0.0.1,.internal.example.com" \
  "https://internal.example.com/health"

正確なホスト名はそのホストと一致します。ドットで始まるドメインは、そのドメインとそのサブドメインに一致します。アスタリスクはすべてのホストに対してプロキシを無効にしますが、これは診断のみに有用です。

除外リストをポリシーとして扱います。広範なサフィックスは、敏感または内部の宛先を意図したゲートウェイの外にルーティングする可能性があります。

WindowsでのcURLプロキシ設定

cURLオプション自体はクロスプラットフォームです。環境と引用の構文だけが変わります。

PowerShellでは:

powershell Copy
$env:http_proxy = "http://proxy.example.com:8080"
$env:HTTPS_PROXY = "http://proxy.example.com:8080"
$env:NO_PROXY = "localhost,127.0.0.1,.internal.example.com"

curl.exe --proxy "http://proxy.example.com:8080" `
  --proxy-user "replace-with-user:replace-with-password" `
  --show-error `
  "https://example.com/"

Remove-Item Env:http_proxy, Env:HTTPS_PROXY, Env:NO_PROXY

curl.exeを、curlが他のコマンドに解決される可能性のあるWindows PowerShell環境で使用します。コマンドプロンプトでは、変数は%NAME%を使用します。再現性のある自動化には、PowerShellまたは保護されたcURL設定ファイルを優先してください。

プロキシの出口IPを確認

最初に直接制御レスポンスを記録し、次に同じリクエストをプロキシを経由して行います:

bash Copy
curl --silent --show-error "https://httpbin.org/ip"

curl --silent --show-error \
  --proxy "http://proxy.example.com:8080" \
  "https://httpbin.org/ip"

異なるIP値は、ルーティングが変更されたことを示しています。これらは、要求された国、セッションの動作、匿名性のレベル、またはターゲットページの成功を証明するものではありません。

真正な受け入れテストのために、以下のすべてを確認してください:

  • cURLが正常に終了する;
  • HTTPステータスが期待される;
  • 本文に必要なマーカーが含まれている;
  • 出口IPまたは地域がタスクポリシーを満たす;
  • DNS解決が意図した側で行われる;
  • 詳細接続出力に承認されていないホストが表示されない。

本文を保存せずにステータスとリモートピアアドレスを印刷できます:

bash Copy
curl --output /dev/null --silent --show-error \
  --write-out 'status=%{http_code} peer=%{remote_ip}\n' \
  --proxy "http://proxy.example.com:8080" \
  "https://example.com/"

一般的なcURLプロキシエラー

407 Proxy Authentication Required

プロキシは提供された資格情報を受け入れなかったか、アカウント/チャネルがリクエストを処理できない可能性があります。ユーザー名の形式、パスワード、チャネルの状態、および許可された認証方法を確認してください。ターゲットサイト401エラーをプロキシ407エラーとは別に保持してください。

接続がタイムアウトしました

プロキシのホスト名、ポート、ファイアウォール、VPNの競合、エンドポイントがHTTP、HTTPS、またはSOCKSを期待しているかを確認してください。接続設定の範囲を制限するには--connect-timeoutを使用し、全体の操作を制限するには--max-timeを使用してください。

プロキシ証明書エラー

HTTPSプロキシの場合、プロキシのホスト名がその証明書と一致し、正しいCAが信頼されていることを確認してください。宛先CAオプションとプロキシCAオプションは、異なるTLS接続を保護します。

Could not resolve host

メッセージがsocks5://を使用してターゲットを指定している場合、プロキシ側のDNSを意図しているときはsocks5h://に切り替えてください。プロキシを指名している場合は、ローカルDNSまたはプロキシホスト名を修正してください。

直接リクエストは機能するが、プロキシリクエストが失敗する

詳細な出力、ターゲットポリシー、プロキシ位置、プロトコル、および本文マーカーを比較してください。出口IPエンドポイントは機能する場合がありますが、実際のターゲットがトラフィックを拒否することがあるので、常に許可された本番ホスト名を別々にテストしてください。

ScrapelessプロキシでcURLを使用

Scrapeless Proxy Solutions製品ページでは、住宅用、データセンター、静的ISP、IPv6オプションについて説明しています。Scrapelessダッシュボードでチャネルを作成し、生成されたゲートウェイ、ユーザー名、およびパスワードをコピーしてください。ユーザー名の形式を考案しないでください; プロキシタイプ、場所、およびそのチャネル用に選択されたセッションパラメータが含まれる場合があります。

生成された値を保護された変数として設定します:

bash Copy
export SCRAPELESS_PROXY_HOST="gw-us.scrapeless.io"
export SCRAPELESS_PROXY_PORT="8789"
export SCRAPELESS_PROXY_USER="replace-with-generated-username"
read -r -s -p "Scrapeless proxy password: " SCRAPELESS_PROXY_PASS
printf '\n'

curl --proxy "http://${SCRAPELESS_PROXY_HOST}:${SCRAPELESS_PROXY_PORT}" \
  --proxy-user "${SCRAPELESS_PROXY_USER}:${SCRAPELESS_PROXY_PASS}" \
  --connect-timeout 10 \
  --max-time 30 \
  --show-error \
  "https://httpbin.org/ip"

unset SCRAPELESS_PROXY_PASS

上記のゲートウェイは、現在の文書化された米国エンドポイントです。ダッシュボードや現在の文書から、アプリケーションに最も近いエンドポイントを選択してください。出口の地理は生成されたユーザー名のパラメータを通じて別に制御されます。
Scrapelessプロキシ設定ガイドに従ってチャネルを作成し、その後プロキシ機能リファレンスを使用して現在のゲートウェイおよびロケーションフィールドを確認してください。

アドレスタイプの選択に迷っている場合は、データセンター対住宅プロキシガイドが運用上のトレードオフを説明しています。Scrapelessの料金を確認して現在の条件を確認してください。

cURLプロキシチェックリスト

  • ターゲットとプロキシがタスクに対して認可されていることを確認します。
  • プロキシURLスキームをプロバイダーのエンドポイントに合わせます。
  • プロキシ側のDNSが必要な場合はsocks5h://を使用します。
  • 認証情報はURL、プロンプト、ログ、リポジトリの外に置きます。
  • 特殊文字を含む可能性のあるすべての変数を引用符で囲みます。
  • 接続と合計時間を制限します。
  • NO_PROXYまたは--noproxyを狭く設定します。
  • プロキシ応答を直接制御と比較します。
  • 期待されるコンテンツを検証し、出口IPだけでなくします。
  • 通常のログから冗長な診断を削除します。

Scrapelessプロキシチャネルを作成し、許可されている一つの公開エンドポイントに対して最初にテストします。

FAQ

Q: cURLプロキシの構文は何ですか?

curl --proxy "scheme://host:port" "https://target.example.com/"を使用します。短縮形はcurl -x "scheme://host:port" "https://target.example.com/"です。

Q: プロキシのユーザー名とパスワードをどうやって追加しますか?

--proxy-user "username:password"を使用し、認証情報はプロキシURLの外に置いておきます。自動化では、保護された秘密ストアから値を注入します。

Q: socks5://socks5h://の違いは何ですか?

socks5://では、cURLはターゲットホスト名をローカルで解決します。socks5h://では、SOCKS5プロキシがそれを解決します。

Q: HTTPSウェブサイトにHTTPプロキシを使用できますか?

はい。cURLは通常、HTTPプロキシを通してトンネルを作成するためにHTTP CONNECTを使用し、その後HTTPSの宛先でTLSを実行します。

Q: 一つのホストのためにプロキシを無効にするにはどうすればいいですか?

一つのコマンド用には--noproxy "host.example"を使用するか、ホストをNO_PROXYに追加します。リストを狭く保ち、ドメインサフィックスの一致を確認します。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ