Skip to content

Commit 1380c24

Browse files
bincooobincooo
authored andcommitted
feat: 添加socks5本地代理设置
1 parent 349208a commit 1380c24

4 files changed

Lines changed: 69 additions & 25 deletions

File tree

chat.go

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ package edge
33
import (
44
"bytes"
55
"context"
6+
"crypto/tls"
67
"encoding/json"
78
"errors"
89
"github.com/RomiChan/websocket"
910
"github.com/google/uuid"
11+
"golang.org/x/net/proxy"
1012
"io"
13+
"net"
1114
"net/http"
1215
"net/url"
1316
"strconv"
@@ -414,9 +417,25 @@ func (c *Chat) newConn() (*wsConn, error) {
414417
if err != nil {
415418
return nil, err
416419
}
417-
dialer = &websocket.Dialer{
418-
Proxy: http.ProxyURL(purl),
419-
HandshakeTimeout: 45 * time.Second,
420+
421+
if purl.Scheme == "http" || purl.Scheme == "https" {
422+
dialer = &websocket.Dialer{
423+
Proxy: http.ProxyURL(purl),
424+
HandshakeTimeout: 45 * time.Second,
425+
}
426+
}
427+
428+
if purl.Scheme == "socks5" {
429+
dialer = &websocket.Dialer{
430+
NetDialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
431+
d, e := proxy.SOCKS5("tcp", purl.Host, nil, proxy.Direct)
432+
if e != nil {
433+
return nil, e
434+
}
435+
return d.Dial(network, addr)
436+
},
437+
HandshakeTimeout: 45 * time.Second,
438+
}
420439
}
421440
}
422441

@@ -553,7 +572,7 @@ func (c *Chat) Delete() error {
553572
}
554573

555574
request.Header = c.newHeader()
556-
client, err := c.newClient()
575+
client, err := newClient(c.proxies)
557576
if err != nil {
558577
return &ChatError{"delete", err}
559578
}
@@ -600,10 +619,7 @@ func (c *Chat) Delete() error {
600619
request.Header = c.newHeader()
601620
request.Header.Set("Authorization", "Bearer "+authorization)
602621
request.Header.Set("Content-Type", "application/json")
603-
client, err = c.newClient()
604-
if err != nil {
605-
return &ChatError{"delete", err}
606-
}
622+
607623
r, err = client.Do(request)
608624
if err != nil {
609625
return &ChatError{"delete", err}
@@ -630,7 +646,7 @@ func (c *Chat) LoadPlugins(names ...string) (plugins []string, err error) {
630646
}
631647

632648
request.Header = c.newHeader()
633-
client, err := c.newClient()
649+
client, err := newClient(c.proxies)
634650
if err != nil {
635651
return nil, err
636652
}
@@ -675,7 +691,7 @@ func (c *Chat) newConversation() (*Conversation, error) {
675691
}
676692

677693
request.Header = c.newHeader()
678-
client, err := c.newClient()
694+
client, err := newClient(c.proxies)
679695
if err != nil {
680696
return nil, err
681697
}
@@ -715,19 +731,44 @@ func (c *Chat) newConversation() (*Conversation, error) {
715731
return &conv, nil
716732
}
717733

718-
func (c *Chat) newClient() (*http.Client, error) {
734+
func newClient(proxies string) (*http.Client, error) {
719735
client := http.DefaultClient
720-
if c.proxies != "" {
721-
purl, err := url.Parse(c.proxies)
736+
if proxies != "" {
737+
proxiesUrl, err := url.Parse(proxies)
722738
if err != nil {
723739
return nil, err
724740
}
725-
client = &http.Client{
726-
Transport: &http.Transport{
727-
Proxy: http.ProxyURL(purl),
728-
},
741+
742+
if proxiesUrl.Scheme == "http" || proxiesUrl.Scheme == "https" {
743+
client = &http.Client{
744+
Transport: &http.Transport{
745+
Proxy: http.ProxyURL(proxiesUrl),
746+
TLSClientConfig: &tls.Config{
747+
InsecureSkipVerify: true,
748+
},
749+
},
750+
}
751+
}
752+
753+
// socks5://127.0.0.1:7890
754+
if proxiesUrl.Scheme == "socks5" {
755+
client = &http.Client{
756+
Transport: &http.Transport{
757+
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
758+
dialer, e := proxy.SOCKS5("tcp", proxiesUrl.Host, nil, proxy.Direct)
759+
if e != nil {
760+
return nil, e
761+
}
762+
return dialer.Dial(network, addr)
763+
},
764+
TLSClientConfig: &tls.Config{
765+
InsecureSkipVerify: true,
766+
},
767+
},
768+
}
729769
}
730770
}
771+
731772
return client, nil
732773
}
733774

examples/chat_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ var pMessages = []edge.ChatMessage{
3535
}
3636

3737
func Test_Plugins(t *testing.T) {
38-
options, err := edge.NewDefaultOptions(cookie, "https://bincooo-single-proxy.hf.space/copilot")
38+
options, err := edge.NewDefaultOptions(cookie, "")
3939
if err != nil {
4040
t.Fatal(err)
4141
}
4242

4343
chat := edge.New(options.
44-
Proxies("http://127.0.0.1:7890").
44+
Proxies("socks5://127.0.0.1:7890").
4545
Model(edge.ModelCreative).
4646
Notebook(true))
4747

@@ -109,7 +109,7 @@ func Test_classification(t *testing.T) {
109109
prompt := "查看上面提供的内容,并总结"
110110

111111
chat := edge.New(options.
112-
Proxies("http://127.0.0.1:7890").
112+
Proxies("socks5://127.0.0.1:7890").
113113
Model(edge.ModelCreative).
114114
Notebook(true))
115115
partialResponse, err := chat.Reply(context.Background(), strings.Replace(template, "{{prompt}}", prompt, -1), nil, nil)
@@ -147,7 +147,7 @@ func Test_messages(t *testing.T) {
147147
options.KievAuth(KievAuth, RwBf)
148148
// Sydney 模式需要自行维护历史对话
149149
chat := edge.New(options.
150-
Proxies("http://127.0.0.1:7890").
150+
Proxies("socks5://127.0.0.1:7890").
151151
Model(edge.ModelCreative).
152152
Temperature(1.0).
153153
TopicToE(true))
@@ -237,7 +237,7 @@ func Test_image(t *testing.T) {
237237
t.Fatal(err)
238238
}
239239
options.KievAuth(KievAuth, RwBf)
240-
options.Proxies("http://127.0.0.1:7890")
240+
options.Proxies("socks5://127.0.0.1:7890")
241241
options.Model(edge.ModelSydney)
242242
chat := edge.New(options)
243243
file := "/Users/bincooo/Desktop/Screenshot 2023-11-11 at 11.21.23.png"

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/google/uuid v1.3.0
88
github.com/joho/godotenv v1.5.1
99
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
10+
golang.org/x/net v0.22.0
1011
)
1112

12-
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
13+
require golang.org/x/sys v0.18.0 // indirect

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,7 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
66
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
77
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
88
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
9-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
10-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9+
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
10+
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
11+
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
12+
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

0 commit comments

Comments
 (0)