MCPcopy Create free account
hub / github.com/chainreactors/EvilProxy / BuildHTTPTransport

Function BuildHTTPTransport

sdk/proxyutil/proxy.go:89–125  ·  view source on GitHub ↗

BuildHTTPTransport constructs an HTTP transport for the provided proxy setting.

(raw string)

Source from the content-addressed store, hash-verified

87
88// BuildHTTPTransport constructs an HTTP transport for the provided proxy setting.
89func BuildHTTPTransport(raw string) (*http.Transport, Mode, error) {
90 setting, errParse := Parse(raw)
91 if errParse != nil {
92 return nil, setting.Mode, errParse
93 }
94
95 switch setting.Mode {
96 case ModeInherit:
97 return nil, setting.Mode, nil
98 case ModeDirect:
99 return NewDirectTransport(), setting.Mode, nil
100 case ModeProxy:
101 if setting.URL.Scheme == "socks5" || setting.URL.Scheme == "socks5h" {
102 var proxyAuth *proxy.Auth
103 if setting.URL.User != nil {
104 username := setting.URL.User.Username()
105 password, _ := setting.URL.User.Password()
106 proxyAuth = &proxy.Auth{User: username, Password: password}
107 }
108 dialer, errSOCKS5 := proxy.SOCKS5("tcp", setting.URL.Host, proxyAuth, proxy.Direct)
109 if errSOCKS5 != nil {
110 return nil, setting.Mode, fmt.Errorf("create SOCKS5 dialer failed: %w", errSOCKS5)
111 }
112 transport := cloneDefaultTransport()
113 transport.Proxy = nil
114 transport.DialContext = func(_ context.Context, network, addr string) (net.Conn, error) {
115 return dialer.Dial(network, addr)
116 }
117 return transport, setting.Mode, nil
118 }
119 transport := cloneDefaultTransport()
120 transport.Proxy = http.ProxyURL(setting.URL)
121 return transport, setting.Mode, nil
122 default:
123 return nil, setting.Mode, nil
124 }
125}
126
127// BuildDialer constructs a proxy dialer for settings that operate at the connection layer.
128func BuildDialer(raw string) (proxy.Dialer, Mode, error) {

Calls 4

ParseFunction · 0.85
NewDirectTransportFunction · 0.85
cloneDefaultTransportFunction · 0.85
DialMethod · 0.80