diff --git a/.vscode/launch.json b/.vscode/launch.json index e6be0f4..d086046 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,8 +11,11 @@ "mode": "auto", "program": "${workspaceFolder}", "env": { - "Go-Proxy-BingAI-Debug": "true", - "PORT": "8888" + "PORT": "8888", + "Go_Proxy_BingAI_Debug": "true", + "Go_Proxy_BingAI_SOCKS_URL": "192.168.0.88:1070", + // "Go_Proxy_BingAI_SOCKS_USER": "xxx", + // "Go_Proxy_BingAI_SOCKS_PWD": "xxx", } } ] diff --git a/README.md b/README.md index 8177adf..848635b 100644 --- a/README.md +++ b/README.md @@ -6,22 +6,25 @@ ⭐ 无需登录即可畅聊 +⭐ 无单次对话次数限制 + ⭐ 需要画图等高级功能时,可登录微软账号设置用户 Cookie 进行体验 -⭐ 遇到一切问题,先点左下角 ![新主题](./docs/img/bing-clear.png) 试试,不行使用刷新大法(Shift + F5 或 Ctrl + Shift + R 或 右上角设置中的重置),最终大招就 清理浏览器缓存 及 Cookie ,比如(24小时限制、未登录提示等等) +⭐ 遇到一切问题,先点左下角 ![新主题](./docs/img/bing-clear.png) 试试,不行使用刷新大法(Shift + F5 或 Ctrl + Shift + R 或 右上角设置中的重置),最终大招就 清理浏览器缓存 及 Cookie ,比如(24 小时限制、未登录提示等等) - [go-proxy-bing](#go-proxy-bing) - - [网页展示](#网页展示) - - [侧边栏](#侧边栏) - - [演示站点](#演示站点) - - [获取Cookie](#获取Cookie) - - [部署](#部署) - - [Docker](#Docker) - - [Release](#Release) - - [Railway](#Railway) - - [Vercel](#Vercel) - - [Render](#Render) - - [TODO](#TODO) + - [网页展示](#网页展示) + - [侧边栏](#侧边栏) + - [演示站点](#演示站点) + - [获取 Cookie](#获取Cookie) + - [环境变量](#环境变量) + - [部署](#部署) + - [Docker](#Docker) + - [Release](#Release) + - [Railway](#Railway) + - [Vercel](#Vercel) + - [Render](#Render) + - [TODO](#TODO) ## 网页展示 @@ -59,49 +62,87 @@ - https://bing.vcanbb.top -### Railway搭建 +### Railway 搭建 - https://bing-railway.vcanbb.top - https://go-proxy-bingai-production.up.railway.app -### Vercel搭建 +### Vercel 搭建 - https://bing-vercel.vcanbb.top - https://go-proxy-bingai-git-master-adams549659584.vercel.app -### Render搭建 +### Render 搭建 - https://bing-render.vcanbb.top - https://go-proxy-bingai.onrender.com -## 获取Cookie +## 获取 Cookie - 访问 https://www.bing.com/ 或 https://cn.bing.com/ ,登录 - F12 或 Ctrl + Shift + I 打开控制台 -- 拿到 Cookie 后,在网站设置用户Cookie弹窗填入即可。 +- 拿到 Cookie 后,在网站设置用户 Cookie 弹窗填入即可。 ![获取Cookie](./docs/img/bing-cookie.png) +## 环境变量 + +```bash +# 运行端口 默认 8080 可选 +PORT=8080 +# Socks 环境变量 示例 可选 +Go_Proxy_BingAI_SOCKS_URL=192.168.0.88:1070 +# Socks 账号、密码 可选 +Go_Proxy_BingAI_SOCKS_USER=xxx +Go_Proxy_BingAI_SOCKS_PWD=xxx +``` + ## 部署 > 需 https 域名 (自行配置 nginx 等) > 支持 Linux (amd64 / arm64)、Windows (amd64 / arm64) +> 国内机器部署可配置 socks 环境变量 + ### Docker > 参考 [Dockerfile](./docker/Dockerfile) 、[docker-compose.yml](./docker/docker-compose.yml) -示例 +- docker 示例 ```bash # 运行容器 监听8080 端口 docker run -d -p 8080:8080 --name go-proxy-bingai --restart=unless-stopped adams549659584/go-proxy-bingai + +# 配置 socks 环境变量 +docker run -e Go_Proxy_BingAI_SOCKS_URL=192.168.0.88:1070 -e Go_Proxy_BingAI_SOCKS_USER=xxx -e Go_Proxy_BingAI_SOCKS_PWD=xxx -d -p 8080:8080 --name go-proxy-bingai --restart=unless-stopped adams549659584/go-proxy-bingai +``` + +- docker compose 示例 + +```bash +version: '3' + +services: + go-proxy-bingai: + # 镜像名称 + image: adams549659584/go-proxy-bingai + # 容器名称 + container_name: go-proxy-bingai + # 自启动 + restart: unless-stopped + ports: + - 8080:8080 + # environment: + # - Go_Proxy_BingAI_SOCKS_URL=192.168.0.88:1070 + # - Go_Proxy_BingAI_SOCKS_USER=xxx + # - Go_Proxy_BingAI_SOCKS_PWD=xxx ``` ### Release @@ -116,7 +157,8 @@ docker run -d -p 8080:8080 --name go-proxy-bingai --restart=unless-stopped adams PORT=8080 RAILWAY_DOCKERFILE_PATH=docker/Dockerfile ``` -一键部署,点这里 => [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/uIckWS?referralCode=BBs747) + +一键部署,点这里 => [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/uIckWS?referralCode=BBs747) ![Railway 模板部署](./docs/img/railway-1.png) @@ -142,12 +184,11 @@ RAILWAY_DOCKERFILE_PATH=docker/Dockerfile ![Render 域名](./docs/img/render-2.png) - ## TODO -- [ ] 撰写 +- [x] 撰写 - [ ] Vue3 重构 - [ ] 提示词 - [ ] 保存历史消息 - [ ] 导出消息到本地(Markdown、图片、PDF) -- [ ] 简单访问权限控制 \ No newline at end of file +- [ ] 简单访问权限控制 diff --git a/common/proxy.go b/common/proxy.go index d1b39b0..b3577d0 100644 --- a/common/proxy.go +++ b/common/proxy.go @@ -9,10 +9,12 @@ import ( "net/http" "net/http/httputil" "net/url" + "os" "strconv" "strings" "github.com/andybalholm/brotli" + "golang.org/x/net/proxy" ) var ( @@ -164,7 +166,35 @@ func NewSingleHostReverseProxy(target *url.URL) *httputil.ReverseProxy { // } // 代理请求 请求回来的内容 报错自动调用 - return &httputil.ReverseProxy{Director: director, ModifyResponse: modifyFunc, ErrorHandler: errorHandler} + reverseProxy := &httputil.ReverseProxy{ + Director: director, + ModifyResponse: modifyFunc, + ErrorHandler: errorHandler, + } + + // socks + socksUrl := os.Getenv("Go_Proxy_BingAI_SOCKS_URL") + if socksUrl != "" { + socksUser := os.Getenv("Go_Proxy_BingAI_SOCKS_USER") + socksPwd := os.Getenv("Go_Proxy_BingAI_SOCKS_PWD") + var socksAuth *proxy.Auth + if socksUser != "" && socksPwd != "" { + socksAuth = &proxy.Auth{ + User: socksUser, + Password: socksPwd, + } + } + s5Proxy, err := proxy.SOCKS5("tcp", socksUrl, socksAuth, proxy.Direct) + if err != nil { + panic(err) + } + tr := &http.Transport{ + Dial: s5Proxy.Dial, + } + reverseProxy.Transport = tr + } + + return reverseProxy } func replaceResBody(originalBody string, originalScheme string, originalHost string) string { diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c74ac04..dd3ec19 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -10,6 +10,10 @@ services: restart: unless-stopped ports: - 8080:8080 + # environment: + # - Go_Proxy_BingAI_SOCKS_URL=192.168.0.88:1070 + # - Go_Proxy_BingAI_SOCKS_USER=xxx + # - Go_Proxy_BingAI_SOCKS_PWD=xxx # go-proxy-bingai: # # 镜像名称 @@ -25,7 +29,11 @@ services: # networks: # - MyNetwork # ports: -# - 8888:8080 +# - 8888:8080 +# environment: +# - Go_Proxy_BingAI_SOCKS_URL=192.168.0.88:1070 +# # - Go_Proxy_BingAI_SOCKS_USER=xxx +# # - Go_Proxy_BingAI_SOCKS_PWD=xxx # networks: # MyNetwork: diff --git a/go.mod b/go.mod index 98a73cd..0277ec6 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,7 @@ module adams549659584/go-proxy-bingai go 1.20 -require github.com/andybalholm/brotli v1.0.5 +require ( + github.com/andybalholm/brotli v1.0.5 + golang.org/x/net v0.10.0 +) diff --git a/go.sum b/go.sum index 81fd3e9..f1e885a 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,4 @@ github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= diff --git a/web/chat.html b/web/chat.html index e8ec3cc..096efcb 100644 --- a/web/chat.html +++ b/web/chat.html @@ -45,7 +45,7 @@
diff --git a/web/sw.js b/web/sw.js index 5e6fad6..4071b8f 100644 --- a/web/sw.js +++ b/web/sw.js @@ -1,7 +1,7 @@ // 引入workbox 框架 importScripts('./js/sw/workbox-sw.js'); -const SW_VERSION = 'v1.4.2'; +const SW_VERSION = 'v1.5.0'; const CACHE_PREFIX = 'BingAI'; workbox.setConfig({ debug: false, logLevel: 'warn' }); @@ -61,7 +61,7 @@ workbox.precaching.precacheAndRoute([ // html { url: '/web/chat.html', - revision: '2023.05.08', + revision: '2023.05.09', }, { url: '/web/compose.html', diff --git a/web/web.go b/web/web.go index 299a7ee..3ff4fb7 100644 --- a/web/web.go +++ b/web/web.go @@ -16,7 +16,7 @@ var IS_DEBUG_MODE bool var WEB_PATH_MAP = make(map[string]bool) func init() { - IS_DEBUG_MODE = os.Getenv("Go-Proxy-BingAI-Debug") != "" + IS_DEBUG_MODE = os.Getenv("Go_Proxy_BingAI_Debug") != "" var err error if IS_DEBUG_MODE {