gitやcurlなどのツールがシステムネットワークプロキシを使用できないのはなぜですか?

gitやcurlなどのツールがシステムネットワークプロキシを使用できないのはなぜですか?

私のオペレーティングシステム:MacOSX

gitとcurlは環境変数を使用できますhttp_proxyhttps_proxyこれにより、実行時に使用でき、マイプロキシサーバーを介してターゲットサーバーにアクセスできます。

Git、Curl、およびその他のツールがシステムWIFIネットワークプロキシ設定を使用できないのはなぜですか?

結局のところ、すべて私のWi-Fiネットワーク経由でリクエストを送信しませんか?

デバッグの詳細:

WIFI HTTPプロキシ設定:

ここに画像の説明を入力してください。

⚡  curl google.com    
curl: (7) Failed to connect to google.com port 80: Operation timed out

WIFI HTTPプロキシ設定を消去する:

ここに画像の説明を入力してください。

http_proxy、、、https_proxy環境all_proxy変数を設定します。

⚡  export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
⚡  echo $http_proxyhttp://127.0.0.1:7890
http://127.0.0.1:7890
⚡  curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

Curlはそのサイトにアクセスできますgoogle.com

答え1

などのコマンドラインツールの場合、curl「システムプロキシの設定」は、2番目の例で設定したものとまったく同じです(変数$http_proxyなど)。 「システムプロキシ設定」の設定に使用するGUIツールは、ターミナルセッションにこれらの変数を設定しますか?そうでない場合は、これらの設定を使用しない理由がわかります。ただ、GUIプロキシ設定アプリケーションはコマンドラインツールと互換性がないということです。

$http_proxyなど。環境変数は *nix コマンドライン標準です。プロキシを設定するためにGUIアプリケーションを作成し、その設定がコマンドラインツールで機能することを望む人は誰でもこの標準に準拠する必要があります。その逆も同様です。これは、グラフィカルDEがエージェント情報を保存する多くの方法があり、コマンドラインツールにはそのすべての情報を知る方法がないためです。実行 - 通常グラフィック DE 実行なしで実行)。curlGNOME、KDE、XFCE、その他複数のLinux DE、Windowsの基本DE、MacOSの基本DE、またはDEのない単純なテキストモードSSHセッションで同じコードが実行されているとします。

すべてのGUIツールのプロキシ設定しなければならない$http_proxyターミナルセッションなどの変数の後続の設定が発生します。そうでなければ、GUIツールは不都合です。

答え2

ここで使用する環境変数は、コマンドラインツールを含む一般的なUnixツールでプロキシ設定を表す標準のUnixメソッドです。このデザインには、次のようないくつかの利点があります。

  • これにより、各プログラムが使用するプロキシまたはプロキシを使用するかどうかをカスタマイズできます。
  • これは、プロトコルを含むプロキシ設定にかなりの特異性を可能にします。
  • すべてのUnixシステムで移植可能な方法で動作します。 macOSから設定を読み取るには、ポータブルプログラムがmacOS関連の追加コード(Objective Cで書かれたコードかもしれません)に関連付ける必要があるかもしれません。

人々はしばしば、「ベンダーがプロキシ設定にアクセスできるポータブルライブラリを提供できないのはなぜですか?」と疑問に思います。しかし、残念ながら誰もこれを実行しておらず、さまざまな環境(GNOME、KDE、MATE、macOS)ではまったく異なる動作をします。 Appleは、他のUnixシステムと同様の作業をしばしば回避します(OpenGLやVulkanの代わりにMetal、ELFの代わりにMach-Oなど)。したがって、他のUnixシステムが標準ツールを提供していても、Appleはこれらのライブラリをデフォルトでリリースしません。 。

関連情報