참고 : 여기서 패치는 버전 2.4.11의 2015 년에 git에 적용되었습니다. 그 이후로 http.proxy 구성 설정과 함께 socks : // URL을 사용할 수 있습니다.
git : // 프로토콜의 경우 Using Git with a SOCKS proxy 있습니다. 그러나 git은 socks 프록시를 제대로 지원하지 않는 것으로 보입니다. git 자체는 libcurl에 연결됩니다. 따라서 .curlrc 파일은 사용되지 않습니다 (컬 명령 줄 클라이언트에만 해당). 그러나 다음 패치는 필요한 지원을 제공합니다. 이 패치를 git에 적용하면 ALL_PROXY 환경 변수 또는 HTTP_PROXY 또는 HTTPS_PROXY를 socks://hostname:portnum
(또는 socks4 / socks5) 또는 실제로 http.proxy git config 설정으로 설정하면 libcurl은 이제 실제로 프록시를 사용할 때 socks 프로토콜을 사용합니다.
예를 들어, 활성 추적 :
$ GIT_CURL_VERBOSE=1 bin-wrappers/git -c "http.proxy=socks://localhost:1080" ls-remote http://github.com/patthoyts/tclftd2xx.git
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to proxy localhost port 1080 (#0)
* Trying 127.0.0.1...
* connected
* SOCKS4 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET /patthoyts/tclftd2xx.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.1.msysgit.1.dirty
... and on to a successful request ...
필요한 패치 :
diff --git a/http.c b/http.c
index 3b312a8..f34cc75 100644
--- a/http.c
+++ b/http.c
@@ -322,6 +322,14 @@ static CURL *get_curl_handle(void)
if (curl_http_proxy) {
curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+#if LIBCURL_VERSION_NUM >= 0x071800
+ if (!strncmp("socks5", curl_http_proxy, 6))
+ curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+ else if (!strncmp("socks4a", curl_http_proxy, 7))
+ curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
+ else if (!strncmp("socks", curl_http_proxy, 5))
+ curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+#endif
}
return result;