내 운영체제: MacOSX
git과 컬은 환경 변수를 사용할 수 있습니다 http_proxy
. https_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
"시스템 프록시 설정"은 두 번째 예에서 설정한 것과 정확히 같습니다(예: 변수 $http_proxy
등) . "시스템 프록시 설정"을 설정하는 데 사용하는 GUI 도구가 터미널 세션에 대해 이러한 변수를 설정합니까? 그렇지 않다면 이러한 설정을 사용하지 않는 이유를 알 수 있습니다. 단지 GUI 프록시 설정 응용 프로그램이 명령줄 도구와 호환되지 않는다는 것입니다.
$http_proxy
등. 환경 변수는 *nix 명령줄 표준입니다. 프록시를 설정하기 위해 GUI 애플리케이션을 작성하고 해당 설정이 명령줄 도구와 함께 작동하도록 원하는 사람은 누구나 이 표준을 준수해야 합니다. 그 반대도 마찬가지입니다. 그래픽 DE가 에이전트 정보를 저장할 수 있는 수많은 방법이 있고 명령줄 도구는 그 모든 정보를 알 수 있는 방법이 없기 때문입니다. 실행 - 일반적으로 그래픽 DE 실행 없이 실행). curl
GNOME, 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은 이러한 라이브러리를 기본적으로 출시하지 않을 것입니다. .