クイックアンサー
curlでプロキシを使うには?
HTTPプロキシにはcurl -x http://USERNAME:[email protected]:7777 https://api.ipify.org、SOCKS5には--socks5-hostname gw.crawlrelay.com:7778と-U USERNAME:PASSWORDを使います。CrawlRelay レジデンシャルプロキシは国とスティッキーセッションをユーザー名に含めます(例:USERNAME-country-de-session-t1-ttl-10)。$0.50/GBから利用可能。KYC不要の暗号通貨払い対応。
curlで必要なフラグ
-x / --proxy | プロキシURL:http://host:port、認証情報は省略可 |
|---|---|
-U / --proxy-user | プロキシ認証情報をUSERNAME:PASSWORDとしてURLから分離 |
--socks5-hostname | 出口でDNS解決されるSOCKS5プロキシ |
-v | CONNECT交換とプロキシのステータス行を表示 |
-w | タイミング、サイズ、%{http_connect}、プロキシのCONNECTステータスを表示 |
--max-time, --connect-timeout | 合計および接続時間制限(秒単位) |
基本的なプロキシコマンドとは?
各コマンドはウェブサイトが見る出口IPを表示します。
# Rotating exit, any country
curl -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://api.ipify.org
# Country and city (city availability varies)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-city-chicago:PASSWORD https://api.ipify.org
# Sticky: run it twice, the IP stays the same for up to 10 minutes (it can change earlier)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-de-session-t1-ttl-10:PASSWORD https://api.ipify.org
# SOCKS5, DNS resolved at the exit
curl --socks5-hostname gw.crawlrelay.com:7778 -U USERNAME-country-gb:PASSWORD https://api.ipify.orgcurlでプロキシ接続をデバッグするには?
-vを使って実行し、CONNECTの周辺行を読みます。動作中のトンネルはHTTP/1.1 200 Connection establishedを表示し、その後ウェブサイトとのTLSハンドシェイクが続きます。その行の他のステータスはプロキシからのもので、407は認証情報、502または504は出口またはターゲットの問題です。以下の-wフォーマットは同じ情報を1行で出力し、ループやCIチェックに便利です。
# Full exchange, including the proxy's answer to CONNECT
curl -v -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://example.com/ -o /dev/null
# One line: proxy CONNECT status, HTTP status, compressed bytes and timings
curl -s --compressed -o /dev/null -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD \
-w 'connect=%{http_connect} http=%{http_code} bytes=%{size_download} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' \
https://example.com/ローテーションとセッションが機能するかどうかは?
IPを複数回リクエストします。セッションIDなしでは毎回新しい接続と見なされ通常は異なるIPが表示されます。セッションIDがある場合、TTL終了までは同じIPが保持されますが、早く変わることもあります。
echo "rotating:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD https://api.ipify.org; echo
done
echo "sticky:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-session-loop1-ttl-5:PASSWORD https://api.ipify.org; echo
doneWindowsでcurlをプロキシと使うには?
curl.exeを呼び出し、curlは使わないでください。Windows PowerShell 5.1ではcurlはInvoke-WebRequestのエイリアスですが、-xや-Uは認識しません。Windows 10と11では本物のcurlはcurl.exeとして提供されています。PowerShellでは特殊文字を含む引数は引用符で囲み、パスワード内のリテラル$はシングルクォートで書いてください。
curl.exe -x http://gw.crawlrelay.com:7777 -U 'USERNAME-country-fr:PASSWORD' https://api.ipify.orgすべてのコマンドで一度にプロキシを設定するには?
curlは環境変数https_proxyとhttp_proxyを読み、多くのツールも同様です。シェルセッションに設定し、APIなどプロキシを通すべきでないホストはNO_PROXYで指定します。共有マシンではパスワードを全子プロセスに渡る変数にしないよう注意してください。
export https_proxy="http://USERNAME-country-us:[email protected]:7777"
export http_proxy="$https_proxy"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
curl https://api.ipify.org # now uses the proxy
unset https_proxy http_proxy # back to directcurlとプロキシ:質問
--socks5と--socks5-hostnameの違いは?
--socks5ではcurlがホスト名をマシンで解決しIPをプロキシに渡します。--socks5-hostnameはホスト名を送って、プロキシ側で解決します。スクレイピングでは--socks5-hostnameを使うと出口国に合ったDNS回答を得られ、ローカルリゾルバに取得ドメインを見せません。
curlが「CONNECTトンネル失敗、レスポンス407」と言うのはなぜ?
プロキシが認証情報を拒否したか、受け取っていません。ユーザ名とパスワードを確認し、特殊文字はURL内の-xにあればURLエンコードするか、-Uで渡してください。407ページに他の原因があります。
プロキシ経由でページのバイト数を確認するには?
--compressed -o /dev/null -w '%{size_download}\n'を追加します。--compressedはcurlがgzipまたはbrotli圧縮をリクエストし、%{size_download}は圧縮された転送バイト数を数えます。これがないとサーバーは非圧縮でページを送るため数値が数倍になることがあります。実際のページ数件で試して、1,000ページあたりのトラフィックを見積もってください。
curlはプロキシ経由でHTTP/2やHTTP/3を使えますか?
HTTP/2はウェブサイトが対応していればCONNECTトンネル内で機能します。トンネルはTLSを終端まで運ぶためです。HTTP/3はUDP上で動作し、HTTPプロキシのCONNECTトンネルはUDPを通さないため、HTTP/2かHTTP/1.1を使用してください。
コマンドラインでターゲットをテスト
$1.50で1 GB向け、数千回のcurlテストに十分です。