Curlでプロキシを無視するにはどうすればよいですか? $ NO_PROXYを設定してもうまくいかないようです。
Curlは環境変数http_proxy
からプロキシアドレスを読み取り、変数はその値を保持する必要があると想定しています。 bashのようなシェルでは、コマンドの前(またはシェルスクリプト)でexport http_proxy='';
が一時的に値を変更します。
(ENVIRONMENT
見出しの下にあるすべての変数については、curlのマニュアルを参照してください。)
Http_proxyおよびhttps_proxy環境変数を設定したため、同じ問題が発生しました。しかし、時々、別のネットワークに接続し、一時的にプロキシをバイパスする必要があります。 (環境変数を変更せずに)これを行う最も簡単な方法は次のとおりです。
curl --noproxy '*' stackoverflow.com
マニュアルから:"唯一のワイルドカードは、すべてのホストに一致する単一の*文字であり、プロキシを事実上無効にします。"
*文字は、シェルによって誤って展開されないように引用されます。
これはうまく機能し、プロキシ文字列を「」に設定します
curl -x "" http://www.stackoverflow.com
ロングショットですが、プロキシを ""(空の文字列)に設定してみてください。これにより、manページに従ってプロキシ設定がオーバーライドされます。
まず、現在のプロキシ設定をリストしました
env | sort | less
(http_proxy=http://wpad.local.machine.location:port number
のようなものでなければなりません)
その後、設定してみました
export http_proxy=";"
このエラーメッセージが出ました:
curl: (5) Couldn't resolve proxy ';'
試した
export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55
そしてそれは働いた!
PS! http-proxyを忘れずに元の設定に戻す
export http_proxy=http://wpad.local.machine.location:port number
http_proxy
とhttps_proxy
が定義されています。これらの環境の設定を解除して再度設定したくありませんが、--noproxy '*'
は完全に機能します。
curl --noproxy '*' -XGET 172.17.0.2:9200
{
"status" : 200,
"name" : "Medusa",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.5.0",
"build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
"build_timestamp" : "2015-03-23T14:30:58Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
$no_proxy
env変数(小文字)を使用する必要があります。例については https://wiki.archlinux.org/index.php/proxy_settings を参照してください。
また、かなり前にcurlにバグがありました http://sourceforge.net/p/curl/bugs/185/ 、このバグを含む古いcurlバージョンを使用している可能性があります。
プロキシ設定を.curlrcに追加します
proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1
これにより、すべての開発ドメインとローカルマシンのリクエストでプロキシが無視されます。
私の場合(macos、curl 7.54.0
)、~/.bash_profile
で設定されたプロキシがあります
$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy
理由は不明ですが、このバージョンのcurl
は環境変数NO_PRXY
およびno_proxy
で適切に動作できません。その後、プロキシ環境変数を1つずつ設定解除し、HTTPS_PROXY
およびhttps_proxy
。
unset HTTPS_PROXY
unset https_proxy
動作を開始し、内部URLに接続できます
環境に一時的な解決策がある場合は、すべてのプロキシ変数を設定解除することをお勧めします。
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
ラメな答えですが、プロキシが~/.curlrc
ファイル(...)に設定されていないことを忘れないでください。