diff --git a/README.md b/README.md index af4f4ce..54effb9 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ $ ./opera-proxy -api-proxy-list-url https://example.com/proxies.txt -country EU $ ./opera-proxy -api-proxy-list-url https://example.com/proxies.txt -api-proxy-file proxies.txt -country EU ``` -You can free download proxy servers into a file named `proxies.txt`, use `-fetch-freeproxy-out`. The file name and path can be anything (`D:\myproxy.txt`, `xxxxx.txt`). By default, the `proxies.txt` file is created alongside the `opera-proxy` binary. +You can free download proxy servers (default `https://advanced.name/freeproxy`) into a file named `proxies.txt`, use `-fetch-freeproxy-out`. The file name and path can be anything (`D:\myproxy.txt`, `xxxxx.txt`). By default, the `proxies.txt` file is created alongside the `opera-proxy` binary. ``` $ ./opera-proxy -fetch-freeproxy-out proxies.txt @@ -131,7 +131,7 @@ If SurfEasy discover returns API error `801`, the app also automatically tries ` | -country | String | desired proxy location (default "EU") | | -discover-csv | String | read proxy endpoints from CSV instead of SurfEasy discover API | | -dp-export | - | export configuration for dumbproxy | -| -fetch-freeproxy-out | - | Downloads free proxies. Examples: `-fetch-freeproxy-out proxies.txt` or `-fetch-freeproxy-out D:\myproxy.txt` | +| -fetch-freeproxy-out | - | download proxy list from `https://advanced.name/freeproxy` and save it as a text file with one ip:port per line. Examples: `-fetch-freeproxy-out proxies.txt` or `-fetch-freeproxy-out D:\myproxy.txt` | | -fake-SNI | String | domain name to use as SNI in outbound TLS and in tunneled TLS ClientHello when possible | | -init-retries | Number | number of attempts for initialization steps, zero for unlimited retry | | -init-retry-interval | Duration | delay between initialization retries (default 5s) | diff --git a/go.mod b/go.mod index e4255b2..035d1a9 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,6 @@ require ( github.com/Alexey71/go-multierror v1.1.3 github.com/ncruces/go-dns v1.3.3 github.com/things-go/go-socks5 v0.1.1 - golang.org/x/crypto/x509roots/fallback v0.0.0-20260423152011-b9e53593a607 + golang.org/x/crypto/x509roots/fallback v0.0.0-20260501174432-fd0b90d21f9a golang.org/x/net v0.53.0 ) diff --git a/go.sum b/go.sum index a089b38..74a4379 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/things-go/go-socks5 v0.1.1 h1:48hy9cHEXPKeG91G/g4n8zW4uynzPUQy/FkcrJ7r5AY= github.com/things-go/go-socks5 v0.1.1/go.mod h1:1YBHVYG7Oli5ae+Pwkp630cPAwY1pjUPmohO1n0Emg0= -golang.org/x/crypto/x509roots/fallback v0.0.0-20260423152011-b9e53593a607 h1:WlWLkLEVGjGS9LziRuLo1Ut+UkpzbXxFQh94eUUVjeg= -golang.org/x/crypto/x509roots/fallback v0.0.0-20260423152011-b9e53593a607/go.mod h1:+UoQFNBq2p2wO+Q6ddVtYc25GZ6VNdOMyyrd4nrqrKs= +golang.org/x/crypto/x509roots/fallback v0.0.0-20260501174432-fd0b90d21f9a h1:8O35NEY188n08Gmz2lkDFUfw0nNuaHhwI8HdBVGnZwg= +golang.org/x/crypto/x509roots/fallback v0.0.0-20260501174432-fd0b90d21f9a/go.mod h1:+UoQFNBq2p2wO+Q6ddVtYc25GZ6VNdOMyyrd4nrqrKs= golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/handler/handler.go b/handler/handler.go index 5807854..3c0456b 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -44,18 +44,18 @@ type ProxyHandler struct { fakeSNI string } -func NewProxyHandler(d dialer.ContextDialer, logger *clog.CondLogger, fakeSNI string) *ProxyHandler { +func NewProxyHandler(dialer dialer.ContextDialer, logger *clog.CondLogger, fakeSNI string) *ProxyHandler { httptransport := &http.Transport{ MaxIdleConns: TRANSPORT_MAX_IDLE_CONNS, MaxIdleConnsPerHost: TRANSPORT_MAX_IDLE_CONNS_PER_HOST, IdleConnTimeout: TRANSPORT_IDLE_CONN_TIMEOUT, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, - DialContext: d.DialContext, + DialContext: dialer.DialContext, } return &ProxyHandler{ logger: logger, - dialer: d, + dialer: dialer, httptransport: httptransport, fakeSNI: fakeSNI, }