diff --git a/README.md b/README.md index 5543173..018a230 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,27 @@ AZURE_OPENAI_MODEL_MAPPER: gpt-3.5-turbo=gpt-35-turbo API Key: This value can be found in the **Keys & Endpoint** section when examining your resource from the Azure portal. You can use either `KEY1` or `KEY2`. +### Proxy + +**HTTP Proxy** + +Env: + +````shell +AZURE_OPENAI_HTTP_PROXY=http://127.0.0.1:1087 +```` + + + +**Socks5 Proxy** + +Env: + +````shell +AZURE_OPENAI_SOCKS_PROXY=socks5://127.0.0.1:1080 +```` + + ### Use Docker diff --git a/azure/proxy.go b/azure/proxy.go index 5d73f0f..4b9d511 100644 --- a/azure/proxy.go +++ b/azure/proxy.go @@ -85,6 +85,15 @@ func Proxy(c *gin.Context, requestConverter RequestConverter) { } proxy := &httputil.ReverseProxy{Director: director} + transport, err := util.NewProxyFromEnv() + if err != nil { + util.SendError(c, errors.Wrap(err, "get proxy error")) + return + } + if transport != nil { + proxy.Transport = transport + } + proxy.ServeHTTP(c.Writer, c.Request) // issue: https://github.com/Chanzhaoyu/chatgpt-web/issues/831 diff --git a/constant/env.go b/constant/env.go index a0702d3..434dc2e 100644 --- a/constant/env.go +++ b/constant/env.go @@ -4,4 +4,7 @@ const ( ENV_AZURE_OPENAI_ENDPOINT = "AZURE_OPENAI_ENDPOINT" ENV_AZURE_OPENAI_API_VER = "AZURE_OPENAI_API_VER" ENV_AZURE_OPENAI_MODEL_MAPPER = "AZURE_OPENAI_MODEL_MAPPER" + + ENV_AZURE_OPENAI_HTTP_PROXY = "AZURE_OPENAI_HTTP_PROXY" + ENV_AZURE_OPENAI_SOCKS_PROXY = "AZURE_OPENAI_SOCKS_PROXY" ) diff --git a/util/http_proxy.go b/util/http_proxy.go index 120891a..6b428ca 100644 --- a/util/http_proxy.go +++ b/util/http_proxy.go @@ -4,13 +4,29 @@ import ( "context" "encoding/base64" "fmt" + "github.com/stulzq/azure-openai-proxy/constant" "net" "net/http" "net/url" + "os" "golang.org/x/net/proxy" ) +func NewProxyFromEnv() (*http.Transport, error) { + socksProxy := os.Getenv(constant.ENV_AZURE_OPENAI_SOCKS_PROXY) + if socksProxy != "" { + return NewSocksProxy(socksProxy) + } + + httpProxy := os.Getenv(constant.ENV_AZURE_OPENAI_HTTP_PROXY) + if httpProxy != "" { + return NewHttpProxy(httpProxy) + } + + return nil, nil +} + func NewHttpProxy(proxyAddress string) (*http.Transport, error) { proxyURL, err := url.Parse(proxyAddress) if err != nil {