cURLを使用したHTTPリクエストの実行(PROXYを使用)


451

私はこのプロキシアドレスを持っています: 125.119.175.48:8909

のようにcURLを使用してcurl http://www.example.com、ただしネットワークのプロキシアドレスを指定してHTTPリクエストを実行するにはどうすればよいですか?

回答:


411

一般的な方法:

export http_proxy=http://your.proxy.server:port/

その後、(多くの)アプリケーションからプロキシ経由で接続できます。

そして、以下のコメントのとおり、https:

export https_proxy=https://your.proxy.server:port/

76
HTTPSトラフィックをプロキシする必要がある場合、環境変数は大文字です:HTTPS_PROXY
phatblat '14

18
マニュアルページから環境変数は、小文字または大文字で指定できます。小文字バージョンが優先されます。http_proxyは、小文字でのみ使用できるため、例外です。環境変数を使用してプロキシを設定すると、-proxyオプションを使用した場合と同じ結果になります。
キャプテンレプトン2013年

@BipinVayalu、何を確認したいですか?このように、上で説明したように、クライアントはプロキシの「直接的な方法」を使用します。したがって、プロキシは標準のHTTP応答(HTTPコードを含む)を提供します。間違ったhttp_proxy環境変数(たとえば、不正なポートなど)をエクスポートすると、クライアントはそれに接続できず、エラーメッセージ「警告!リモートホストに接続できませんでした!」、または類似のメッセージが表示されます。 -試してみてください:)
airween 2014年

15
curlのソースコードを確認すると、url.c(バージョン7.39の4337行目)で小文字のバージョンを確認し、見つからない場合は大文字を確認します。
Raistmaj 2014年

1
ほとんどのユーザーから訂正が送られてきましたが、今ではそれを共有しています。プロキシ経由のHTTPS接続を使用する場合は、次のようにしてください。export https_proxy = your.proxy.server:port httpSではなく、URLスキーマに「http」プロトコルがあることに注意してください。
airween

662

からman curl

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.

curl:(7)ホストに接続できませんcurl:(7)ホストに接続できませんでした
user873286

このコマンドを実行すると、上記のエラーが発生します:curl -x、
proxy

61
「-x、-proxy」は、どちらか一方を使用できることを意味します。コマンドは、「curl -x 122.72.2.200:80 mysite.com/test.php?id=1」または「curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1」のいずれかである必要があります
IBBoard

8
ドキュメントが正しく上記のように引用されている、しかし、ユーザーとパスワードが異なって表現される必要があります:-x user:password@proxyhost:port
エド・チャペル

ベストアンサーありがとうございます!
haotang 16

128

上記の解決策は、自分で試したcurlバージョン(curl 7.22.0)では機能しない場合があります。しかし、私にとってうまくいったのは:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

それが問題をよりよく解決することを願っています!


同じ問題に
遭遇しました

代わりにこれを手に入れました[1] 4812
アミナヌライニ2017

80

HTTP / HTTPSプロキシの代わりにSOCKSプロキシを使用している場合は、代わりに--socks5スイッチを使用する必要があることに注意してください。

curl --socks5 125.119.175.48:8909 http://example.com/

--socks5-hostname代わりに--socks5を使用して、プロキシ側でDNSを解決することもできます。


6
これは私にはうまくいきませんでしたが、使うことで--socks5-hostnameうまくいきました。
のMichałRybakの

2
@MichałRybakは同じように機能しますが、プロキシ側でDNSを解決します。詳細については、manページ参照してください。
Filipe Correia

3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339私にとってはうまくいくようです。--proxyオプションは、--socks5socks5プロキシを使用する場合よりも何らかの方法で劣っていますか?

@ user993683バージョンに依存します。--proxy今はおそらくあなたが望むものですが、常にサポートされているわけではありませんでした。また、プロキシへの接続前と接続後にそれぞれホスト名(DNS)解決socks5://socks5h://実行することにも注意してください。
マイケル-クレイシャーキーはどこにいるか

51

airweenへの追加として、これを.bashrcに追加すると、非プロキシ環境からプロキシ環境に切り替えることができるようになります。

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

YOURPROXY:YOURPORTが正確な場合、IPおよびポートプロキシ:-)。

次に、単に

proxyon

システムはプロキシの使用を開始しますが、その逆は次のようになります。

proxyoff

34

次を使用

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX プロキシサーバーのIPとポートを配置します。

-v 冗長モードでは、ヘッダーや応答などの詳細が表示されます。


2
これが答えになるはずです。ホスト上のすべてのHTTPクライアントによって実行されるすべてのHTTPリクエストに対して、誰もがグローバル変数(エクスポート)を指定する必要はありません。このオプションにより、柔軟性が高まります。
ivanleoncz 2017

これは、URLに対してさまざまなプロキシを試すときに非常に便利です。ありがとう。
redAce

30

あなたは使うことができます:

curl http://www.example.com --proxy http://125.119.175.48:8909

カールによって説明されるように


26
「カールによって説明されるように」、これはこの答えがその答えのコピーに勝るものではないことを意味します。
Raedwald 2017

26

これを使用して、表示されているIPを取得します

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

これが誰かを助けることを願っています。


19

(Windowsの)ファイルで値を追加curlしてプロキシを設定できるため、構文は次のとおりです。~/.curlrc_curlrcproxy

proxy = http://username:password@proxy-host:port

それでおしまい!数年前にそのファイルでプロキシ設定を構成し、今日、なぜcurlが機能しなくなったのか、プロキシアドレスが変更され、環境変数がすべて正しく設定されたのかと疑問に思いました。それをありがとう!

15

言及されたすばらしい答えすべてを要約するだけです:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>

8

私が使用する認証付きのプロキシで:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

なぜなら、curlがhttp [s] _proxy環境変数を使用/キャッチしない理由がわからないからです。



3

http[s]_proxyワンオフコマンドのプロキシを設定するだけの場合は、シェル変数をエクスポートする必要はありません。例えば

http_proxy=http://your.proxy.server:port curl http://www.example.com

とはcurl -xいえ、常にプロキシを使用するつもりであることがわかっている場合は、そうした方がいいでしょう。


2

職場によっては、CA証明書に関する潜在的な問題を回避するために、curl -k--insecureオプションまたはcurl のオプションを指定する必要がある場合もあります。

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>

1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

これは私にとっては完璧に機能しましたが、curlがプロキシを設定する必要があるためエラーが発生します

プロキシを自分のプロキシに置き換えてください。「例」は http://10.1.1.50:8080/でした。


0

プロキシがPACファイルで自動プロキシを使用している場合。実際のプロキシは、PAC URLのJavaScriptから見つけることができます。

プロキシが認証を必要とする場合、最初に通常のWebブラウザを使用して、認証ダイアログを促進するWebサイトにアクセスできます。認証後、wiresharkを使用して、httpパッケージからプロキシサーバーに送信されたhttpパッケージをキャプチャできます。httpパッケージから、httpヘッダーから認証トークンを取得できます。Proxy -Authorization

次に、http_proxy環境変数を設定し、httpヘッダーに認証トークンを含めることもできます。Proxy -Authorization

エクスポートhttp_proxy = http:// proxyserver:port

curl -H "Proxy-Authorization:xxxx" http:// targetURL

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.