mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-04-07 21:38:21 +00:00
Merge pull request #2578 from LemonZuo/feat_socks5h
feat: support socks5h scheme for proxy settings
This commit is contained in:
@@ -734,7 +734,7 @@ func newProxyAwareWebsocketDialer(cfg *config.Config, auth *cliproxyauth.Auth) *
|
||||
}
|
||||
|
||||
switch setting.URL.Scheme {
|
||||
case "socks5":
|
||||
case "socks5", "socks5h":
|
||||
var proxyAuth *proxy.Auth
|
||||
if setting.URL.User != nil {
|
||||
username := setting.URL.User.Username()
|
||||
|
||||
@@ -58,7 +58,7 @@ func Parse(raw string) (Setting, error) {
|
||||
}
|
||||
|
||||
switch parsedURL.Scheme {
|
||||
case "socks5", "http", "https":
|
||||
case "socks5", "socks5h", "http", "https":
|
||||
setting.Mode = ModeProxy
|
||||
setting.URL = parsedURL
|
||||
return setting, nil
|
||||
@@ -95,7 +95,7 @@ func BuildHTTPTransport(raw string) (*http.Transport, Mode, error) {
|
||||
case ModeDirect:
|
||||
return NewDirectTransport(), setting.Mode, nil
|
||||
case ModeProxy:
|
||||
if setting.URL.Scheme == "socks5" {
|
||||
if setting.URL.Scheme == "socks5" || setting.URL.Scheme == "socks5h" {
|
||||
var proxyAuth *proxy.Auth
|
||||
if setting.URL.User != nil {
|
||||
username := setting.URL.User.Username()
|
||||
|
||||
@@ -30,6 +30,7 @@ func TestParse(t *testing.T) {
|
||||
{name: "http", input: "http://proxy.example.com:8080", want: ModeProxy},
|
||||
{name: "https", input: "https://proxy.example.com:8443", want: ModeProxy},
|
||||
{name: "socks5", input: "socks5://proxy.example.com:1080", want: ModeProxy},
|
||||
{name: "socks5h", input: "socks5h://proxy.example.com:1080", want: ModeProxy},
|
||||
{name: "invalid", input: "bad-value", want: ModeInvalid, wantErr: true},
|
||||
}
|
||||
|
||||
@@ -137,3 +138,24 @@ func TestBuildHTTPTransportSOCKS5ProxyInheritsDefaultTransportSettings(t *testin
|
||||
t.Fatalf("TLSHandshakeTimeout = %v, want %v", transport.TLSHandshakeTimeout, defaultTransport.TLSHandshakeTimeout)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildHTTPTransportSOCKS5HProxy(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
transport, mode, errBuild := BuildHTTPTransport("socks5h://proxy.example.com:1080")
|
||||
if errBuild != nil {
|
||||
t.Fatalf("BuildHTTPTransport returned error: %v", errBuild)
|
||||
}
|
||||
if mode != ModeProxy {
|
||||
t.Fatalf("mode = %d, want %d", mode, ModeProxy)
|
||||
}
|
||||
if transport == nil {
|
||||
t.Fatal("expected transport, got nil")
|
||||
}
|
||||
if transport.Proxy != nil {
|
||||
t.Fatal("expected SOCKS5H transport to bypass http proxy function")
|
||||
}
|
||||
if transport.DialContext == nil {
|
||||
t.Fatal("expected SOCKS5H transport to have custom DialContext")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user