feat: add proxy option (#14)

This commit is contained in:
Frank Cheung 2024-02-06 10:37:06 +08:00 committed by GitHub
parent 7ce9e527f2
commit dbcdd6fce7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 38 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/open-dingtalk/dingtalk-stream-sdk-go/card"
"io"
"net/http"
"net/url"
"sync"
"time"
@ -39,6 +40,7 @@ type StreamClient struct {
mutex sync.Mutex
extras map[string]string
openApiHost string
proxy string
}
func NewStreamClient(options ...ClientOption) *StreamClient {
@ -87,7 +89,21 @@ func (cli *StreamClient) Start(ctx context.Context) error {
header := make(http.Header)
conn, resp, err := websocket.DefaultDialer.Dial(wssUrl, header)
var dialer *websocket.Dialer
if len(cli.proxy) == 0 {
dialer = websocket.DefaultDialer
} else {
proxyURL, err := url.Parse(cli.proxy)
if err != nil {
return err
}
dialer = &websocket.Dialer{
Proxy: http.ProxyURL(proxyURL),
}
}
conn, resp, err := dialer.Dial(wssUrl, header)
if err != nil {
return err
}
@ -311,8 +327,22 @@ func (cli *StreamClient) GetConnectionEndpoint(ctx context.Context) (*payload.Co
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
var transport http.RoundTripper
if len(cli.proxy) == 0 {
transport = http.DefaultTransport
} else {
proxyURL, err := url.Parse(cli.proxy)
if err != nil {
return nil, err
}
transport = &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
}
httpClient := &http.Client{
Transport: http.DefaultTransport,
Transport: transport,
Timeout: 5 * time.Second, //设置超时包含connection时间、任意重定向时间、读取response body时间
}

View File

@ -48,3 +48,9 @@ func WithOpenApiHost(host string) ClientOption {
c.openApiHost = host
}
}
func WithProxy(proxy string) ClientOption {
return func(c *StreamClient) {
c.proxy = proxy
}
}