first commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/net/proxy"
|
||||
)
|
||||
|
||||
func GetTransport(proxyUrl string, user, password string) (*http.Transport, error) {
|
||||
var auth *proxy.Auth
|
||||
if user != "" && password != "" {
|
||||
auth = &proxy.Auth{User: user, Password: password}
|
||||
}
|
||||
switch {
|
||||
case strings.HasPrefix(proxyUrl, "socks5://"):
|
||||
dialer, err := proxy.SOCKS5("tcp", strings.TrimPrefix(proxyUrl, "socks5://"), auth, proxy.Direct)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &http.Transport{Dial: dialer.Dial}, nil
|
||||
case strings.HasPrefix(proxyUrl, "http://"):
|
||||
proxyUrl = strings.TrimPrefix(proxyUrl, "http://")
|
||||
url, err := url.Parse("http://" + proxyUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
transport := &http.Transport{Proxy: http.ProxyURL(url)}
|
||||
if auth != nil {
|
||||
// Encode the credentials in Base64
|
||||
authHeader := "Basic " + base64.StdEncoding.EncodeToString([]byte(user+":"+password))
|
||||
transport.ProxyConnectHeader = http.Header{
|
||||
"Proxy-Authorization": {authHeader},
|
||||
}
|
||||
}
|
||||
return transport, nil
|
||||
case strings.HasPrefix(proxyUrl, "https://"):
|
||||
proxyUrl = strings.TrimPrefix(proxyUrl, "https://")
|
||||
url, err := url.Parse("https://" + proxyUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
transport := &http.Transport{Proxy: http.ProxyURL(url)}
|
||||
if auth != nil {
|
||||
// Encode the credentials in Base64
|
||||
authHeader := "Basic " + base64.StdEncoding.EncodeToString([]byte(user+":"+password))
|
||||
transport.ProxyConnectHeader = http.Header{
|
||||
"Proxy-Authorization": {authHeader},
|
||||
}
|
||||
}
|
||||
return transport, nil
|
||||
default:
|
||||
return nil, errors.New("proxy url schema error")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user