mirror of
https://github.com/valyala/fasthttp.git
synced 2026-06-13 15:46:49 +03:00
This commit is contained in:
@@ -21,6 +21,15 @@ var (
|
|||||||
tmpURL = &url.URL{Scheme: httpsScheme, Host: "example.com"}
|
tmpURL = &url.URL{Scheme: httpsScheme, Host: "example.com"}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func dialFuncOrError(dialFunc fasthttp.DialFunc, err error) fasthttp.DialFunc {
|
||||||
|
if err == nil {
|
||||||
|
return dialFunc
|
||||||
|
}
|
||||||
|
return func(addr string) (net.Conn, error) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Dialer embeds both fasthttp.TCPDialer and httpproxy.Config, allowing it
|
// Dialer embeds both fasthttp.TCPDialer and httpproxy.Config, allowing it
|
||||||
// to take advantage of the optimizations provided by fasthttp for dialing while also
|
// to take advantage of the optimizations provided by fasthttp for dialing while also
|
||||||
// utilizing the finer-grained configuration options offered by httpproxy.
|
// utilizing the finer-grained configuration options offered by httpproxy.
|
||||||
|
|||||||
@@ -261,6 +261,65 @@ func TestHTTPProxyDialRejectsTargetAddrContainingNewlines(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProxyDialerConstructorsReturnErroringDialFunc(t *testing.T) {
|
||||||
|
t.Setenv("HTTP_PROXY", "socket6://127.0.0.1:8080")
|
||||||
|
t.Setenv("HTTPS_PROXY", "socket6://127.0.0.1:8080")
|
||||||
|
t.Setenv("NO_PROXY", "")
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
fn func() fasthttp.DialFunc
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "http",
|
||||||
|
fn: func() fasthttp.DialFunc {
|
||||||
|
return FasthttpHTTPDialer("socket6://127.0.0.1:8080")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "http dual stack",
|
||||||
|
fn: func() fasthttp.DialFunc {
|
||||||
|
return FasthttpHTTPDialerDualStack("socket6://127.0.0.1:8080")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "socks",
|
||||||
|
fn: func() fasthttp.DialFunc {
|
||||||
|
return FasthttpSocksDialer("socket6://127.0.0.1:8080")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "socks dual stack",
|
||||||
|
fn: func() fasthttp.DialFunc {
|
||||||
|
return FasthttpSocksDialerDualStack("socket6://127.0.0.1:8080")
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "env",
|
||||||
|
fn: FasthttpProxyHTTPDialer,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
dialFunc := tt.fn()
|
||||||
|
if dialFunc == nil {
|
||||||
|
t.Fatalf("unexpected nil dial func")
|
||||||
|
}
|
||||||
|
conn, err := dialFunc("example.com:80")
|
||||||
|
if conn != nil {
|
||||||
|
conn.Close()
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("expected error")
|
||||||
|
}
|
||||||
|
if err.Error() != "proxy: unknown scheme: socket6" {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func startProxyServer(t *testing.T, ports []string, counts []atomic.Int64) (lns []net.Listener) {
|
func startProxyServer(t *testing.T, ports []string, counts []atomic.Int64) (lns []net.Listener) {
|
||||||
for i, port := range ports {
|
for i, port := range ports {
|
||||||
ln, err := net.Listen("tcp", ":"+port)
|
ln, err := net.Listen("tcp", ":"+port)
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ func FasthttpHTTPDialer(proxy string) fasthttp.DialFunc {
|
|||||||
// }
|
// }
|
||||||
func FasthttpHTTPDialerTimeout(proxy string, timeout time.Duration) fasthttp.DialFunc {
|
func FasthttpHTTPDialerTimeout(proxy string, timeout time.Duration) fasthttp.DialFunc {
|
||||||
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxy, HTTPSProxy: proxy}, Timeout: timeout, ConnectTimeout: timeout}
|
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxy, HTTPSProxy: proxy}, Timeout: timeout, ConnectTimeout: timeout}
|
||||||
dialFunc, _ := d.GetDialFunc(false)
|
dialFunc, err := d.GetDialFunc(false)
|
||||||
return dialFunc
|
return dialFuncOrError(dialFunc, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FasthttpHTTPDialerDualStack returns a fasthttp.DialFunc that dials using
|
// FasthttpHTTPDialerDualStack returns a fasthttp.DialFunc that dials using
|
||||||
@@ -60,6 +60,6 @@ func FasthttpHTTPDialerDualStackTimeout(proxy string, timeout time.Duration) fas
|
|||||||
Config: httpproxy.Config{HTTPProxy: proxy, HTTPSProxy: proxy}, Timeout: timeout, ConnectTimeout: timeout,
|
Config: httpproxy.Config{HTTPProxy: proxy, HTTPSProxy: proxy}, Timeout: timeout, ConnectTimeout: timeout,
|
||||||
DialDualStack: true,
|
DialDualStack: true,
|
||||||
}
|
}
|
||||||
dialFunc, _ := d.GetDialFunc(false)
|
dialFunc, err := d.GetDialFunc(false)
|
||||||
return dialFunc
|
return dialFuncOrError(dialFunc, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,6 @@ func FasthttpProxyHTTPDialer() fasthttp.DialFunc {
|
|||||||
// }
|
// }
|
||||||
func FasthttpProxyHTTPDialerTimeout(timeout time.Duration) fasthttp.DialFunc {
|
func FasthttpProxyHTTPDialerTimeout(timeout time.Duration) fasthttp.DialFunc {
|
||||||
d := Dialer{Timeout: timeout, ConnectTimeout: timeout}
|
d := Dialer{Timeout: timeout, ConnectTimeout: timeout}
|
||||||
dialFunc, _ := d.GetDialFunc(true)
|
dialFunc, err := d.GetDialFunc(true)
|
||||||
return dialFunc
|
return dialFuncOrError(dialFunc, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import (
|
|||||||
// }
|
// }
|
||||||
func FasthttpSocksDialer(proxyAddr string) fasthttp.DialFunc {
|
func FasthttpSocksDialer(proxyAddr string) fasthttp.DialFunc {
|
||||||
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxyAddr, HTTPSProxy: proxyAddr}}
|
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxyAddr, HTTPSProxy: proxyAddr}}
|
||||||
dialFunc, _ := d.GetDialFunc(false)
|
dialFunc, err := d.GetDialFunc(false)
|
||||||
return dialFunc
|
return dialFuncOrError(dialFunc, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FasthttpSocksDialerDualStack returns a fasthttp.DialFunc that dials using
|
// FasthttpSocksDialerDualStack returns a fasthttp.DialFunc that dials using
|
||||||
@@ -29,6 +29,6 @@ func FasthttpSocksDialer(proxyAddr string) fasthttp.DialFunc {
|
|||||||
// }
|
// }
|
||||||
func FasthttpSocksDialerDualStack(proxyAddr string) fasthttp.DialFunc {
|
func FasthttpSocksDialerDualStack(proxyAddr string) fasthttp.DialFunc {
|
||||||
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxyAddr, HTTPSProxy: proxyAddr}, DialDualStack: true}
|
d := Dialer{Config: httpproxy.Config{HTTPProxy: proxyAddr, HTTPSProxy: proxyAddr}, DialDualStack: true}
|
||||||
dialFunc, _ := d.GetDialFunc(false)
|
dialFunc, err := d.GetDialFunc(false)
|
||||||
return dialFunc
|
return dialFuncOrError(dialFunc, err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user