fix socket5

This commit is contained in:
vanilla 2021-09-08 16:30:37 +08:00
parent 31c9e5da5a
commit dea52191dd

View file

@ -3,9 +3,7 @@ package twitterscraper
import ( import (
"crypto/tls" "crypto/tls"
"errors" "errors"
"fmt"
"golang.org/x/net/proxy" "golang.org/x/net/proxy"
"log"
"net" "net"
"net/http" "net/http"
"net/url" "net/url"
@ -121,21 +119,31 @@ func (s *Scraper) SetProxy(proxy string) error {
// SetProxy set socks5 proxy in the format `HOST:PORT` // SetProxy set socks5 proxy in the format `HOST:PORT`
func (s *Scraper) SetSocks5Proxy(socks5 string) error { func (s *Scraper) SetSocks5Proxy(socks5 string) error {
log.Println(socks5) baseDialer := &net.Dialer{
if dialer, err := proxy.SOCKS5("tcp", socks5, nil, proxy.Direct); err != nil { Timeout: 30 * time.Second,
return errors.New(fmt.Sprintf("can't connect to the socks5 proxy: %s, err: %s", socks5, err.Error())) KeepAlive: 30 * time.Second,
}
if socks5 != "" {
dialSocksProxy, err := proxy.SOCKS5("tcp", socks5, nil, baseDialer)
if err != nil {
return errors.New("Error creating SOCKS5 proxy")
}
if contextDialer, ok := dialSocksProxy.(proxy.ContextDialer); ok {
dialContext := contextDialer.DialContext
s.client = &http.Client{
Transport: &http.Transport{
DialContext: dialContext,
},
}
} else {
return errors.New("Failed type assertion to DialContext")
}
} else { } else {
s.client = &http.Client{ s.client = &http.Client{
Transport: &http.Transport{ Transport: &http.Transport{
Dial: dialer.Dial, DialContext: (baseDialer).DialContext,
// TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
DialContext: (&net.Dialer{
Timeout: 10 * time.Second,
}).DialContext,
}, },
} }
log.Println(s.client)
} }
return nil return nil
} }