chatbox icon indicating copy to clipboard operation
chatbox copied to clipboard

[Feature]麻烦增加软件本身的代理设置,用全局有时候比较麻烦。谢谢

Open FighterLuo opened this issue 2 years ago • 27 comments

麻烦增加软件本身的代理设置,用全局有时候比较麻烦。谢谢

FighterLuo avatar Apr 10 '23 13:04 FighterLuo

不需要用全局吧,用规则就行

VanYe666 avatar Apr 10 '23 14:04 VanYe666

同求,软件有代理设置就方便多了,直接 http://127.0.0.1:1080 就可以,不然还要配置规则

y0an1 avatar Apr 10 '23 15:04 y0an1

同求,感谢🙏

yellowgg avatar Apr 10 '23 15:04 yellowgg

My vps ip is blocked by openai, but I relay the openai api “key” through cloudflare and there seems to be no problem without any proxy function.

myworksfun avatar Apr 11 '23 01:04 myworksfun

同意,我的习惯是非必要不挂梯子,只有浏览器查资料会用chrome扩展[SwitchyOmega]代理流量,因此很需要这个功能。

angangi avatar Apr 11 '23 07:04 angangi

期待这个功能

mefly2012 avatar Apr 11 '23 08:04 mefly2012

同样期待

yuyongxr avatar Apr 12 '23 06:04 yuyongxr

期待代理功能

zkheartboy avatar Apr 12 '23 11:04 zkheartboy

同意,我的习惯是非必要不挂梯子,只有浏览器查资料会用chrome扩展[SwitchyOmega]代理流量,因此很需要这个功能。

是的,我也是这个习惯,全局有时候是不好的。

FighterLuo avatar Apr 13 '23 11:04 FighterLuo

+1

ayakasuki avatar Apr 13 '23 17:04 ayakasuki

以下是chatgpt实现的代码 用golang 实现http反向代理功能:

  1. 参数用flag实现
  2. 请求后端服务支持 http_proxy
  3. 后端服务支持参数输入
  4. 输出反向代理的详细日志

开始编码

// go run main -backend https://api.openai.com -proxy http://localhost:1080 // 将 http://localhost:8080 设置到chatbox代理

package main

import (
        "flag"
        "fmt"
        "log"
        "net/http"
        "net/http/httputil"
        "net/url"
)


func logRequest(r *http.Request) {
        log.Printf("请求: %s %s %s", r.RemoteAddr, r.Method, r.URL)
        for header, values := range r.Header {
                for _, value := range values {
                        log.Printf("请求头: %s: %s", header, value)
                }
        }
}

func logResponse(resp *http.Response) {
        log.Printf("响应: %s %s %d", resp.Request.Method, resp.Request.URL, resp.StatusCode)
        for header, values := range resp.Header {
                for _, value := range values {
                        log.Printf("响应头: %s: %s", header, value)
                }
        }
}

func main() {
        // 使用 flag 定义命令行参数
        backendURLFlag := flag.String("backend", "", "后端服务的 URL")
        httpProxyFlag := flag.String("proxy", "", "HTTP 代理的 URL")

        // 解析命令行参数
        flag.Parse()

        // 检查后端服务 URL 是否为空
        if *backendURLFlag == "" {
                log.Fatal("请提供后端服务的 URL,使用 -backend 参数")
        }

        // 解析后端服务的 URL
        parsedBackendURL, err := url.Parse(*backendURLFlag)
        if err != nil {
                log.Fatalf("解析后端服务 URL 失败: %v", err)
        }

        // 设置 HTTP 代理
        if *httpProxyFlag != "" {
                parsedProxyURL, err := url.Parse(*httpProxyFlag)
                if err != nil {
                        log.Fatalf("解析 HTTP 代理 URL 失败: %v", err)
                }
                http.DefaultTransport = &http.Transport{
                        Proxy: http.ProxyURL(parsedProxyURL),
                }
        }

        // 创建一个反向代理
        proxy := httputil.NewSingleHostReverseProxy(parsedBackendURL)


        // 在发送请求到后端之前记录日志
        proxy.Director = func(r *http.Request) {
                
                r.URL.Scheme = parsedBackendURL.Scheme
                r.URL.Host = parsedBackendURL.Host
                r.Host = parsedBackendURL.Host
                logRequest(r)
        }


        // 设置反向代理的修改器,以支持将参数传递到后端服务
        proxy.ModifyResponse = func(resp *http.Response) error {
                // 在处理响应之前记录日志
                logResponse(resp)                
                query := resp.Request.URL.Query()
                for key, values := range query {
                        for _, value := range values {
                                resp.Header.Add(key, value)
                        }
                }
                return nil
        }

        // 设置反向代理的 HTTP 处理器
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                proxy.ServeHTTP(w, r)
        })

        // 启动 HTTP 服务器
        port := "8080"
        fmt.Printf("代理服务器正在监听端口 %s ...\n", port)
        log.Fatal(http.ListenAndServe(":"+port, nil))
}

BrockChen avatar Apr 14 '23 03:04 BrockChen

期待代理功能

qibaoan8 avatar Apr 17 '23 02:04 qibaoan8

不知道增加这个功能难不难,好像大家已经呼唤了很久,但是一直没有出来,所以即使安装了,目前也是没有办法使用的状态。因为不想开全局代理。作者辛苦了,其他都已经很完美了,但就是这个代理设置的问题,让他处于弃用的状态。不知道有没有哪位大神可以加上去一下,辛苦,谢谢

FighterLuo avatar Apr 18 '23 02:04 FighterLuo

支持新增该功能

LAkimoto avatar Apr 19 '23 11:04 LAkimoto

同求软件本身代理设置🙏

watreyoung avatar Apr 20 '23 01:04 watreyoung

不需要用全局吧,用规则就行

怎么用规则?我再高级FW设置里也没看到呀

ZhiboWong avatar Apr 21 '23 07:04 ZhiboWong

以下是chatgpt实现的代码 用golang 实现http反向代理功能:

  1. 参数用flag实现
  2. 请求后端服务支持 http_proxy
  3. 后端服务支持参数输入
  4. 输出反向代理的详细日志

开始编码

// go run main -backend https://api.openai.com -proxy http://localhost:1080 // 将 http://localhost:8080 设置到chatbox代理

package main

import (
        "flag"
        "fmt"
        "log"
        "net/http"
        "net/http/httputil"
        "net/url"
)


func logRequest(r *http.Request) {
        log.Printf("请求: %s %s %s", r.RemoteAddr, r.Method, r.URL)
        for header, values := range r.Header {
                for _, value := range values {
                        log.Printf("请求头: %s: %s", header, value)
                }
        }
}

func logResponse(resp *http.Response) {
        log.Printf("响应: %s %s %d", resp.Request.Method, resp.Request.URL, resp.StatusCode)
        for header, values := range resp.Header {
                for _, value := range values {
                        log.Printf("响应头: %s: %s", header, value)
                }
        }
}

func main() {
        // 使用 flag 定义命令行参数
        backendURLFlag := flag.String("backend", "", "后端服务的 URL")
        httpProxyFlag := flag.String("proxy", "", "HTTP 代理的 URL")

        // 解析命令行参数
        flag.Parse()

        // 检查后端服务 URL 是否为空
        if *backendURLFlag == "" {
                log.Fatal("请提供后端服务的 URL,使用 -backend 参数")
        }

        // 解析后端服务的 URL
        parsedBackendURL, err := url.Parse(*backendURLFlag)
        if err != nil {
                log.Fatalf("解析后端服务 URL 失败: %v", err)
        }

        // 设置 HTTP 代理
        if *httpProxyFlag != "" {
                parsedProxyURL, err := url.Parse(*httpProxyFlag)
                if err != nil {
                        log.Fatalf("解析 HTTP 代理 URL 失败: %v", err)
                }
                http.DefaultTransport = &http.Transport{
                        Proxy: http.ProxyURL(parsedProxyURL),
                }
        }

        // 创建一个反向代理
        proxy := httputil.NewSingleHostReverseProxy(parsedBackendURL)


        // 在发送请求到后端之前记录日志
        proxy.Director = func(r *http.Request) {
                
                r.URL.Scheme = parsedBackendURL.Scheme
                r.URL.Host = parsedBackendURL.Host
                r.Host = parsedBackendURL.Host
                logRequest(r)
        }


        // 设置反向代理的修改器,以支持将参数传递到后端服务
        proxy.ModifyResponse = func(resp *http.Response) error {
                // 在处理响应之前记录日志
                logResponse(resp)                
                query := resp.Request.URL.Query()
                for key, values := range query {
                        for _, value := range values {
                                resp.Header.Add(key, value)
                        }
                }
                return nil
        }

        // 设置反向代理的 HTTP 处理器
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                proxy.ServeHTTP(w, r)
        })

        // 启动 HTTP 服务器
        port := "8080"
        fmt.Printf("代理服务器正在监听端口 %s ...\n", port)
        log.Fatal(http.ListenAndServe(":"+port, nil))
}

这个可以实现单独让chatbox走代理吗?

ZhiboWong avatar Apr 21 '23 07:04 ZhiboWong

再次呼吁一下,没有啥特别好的规则代理软件,设置全局又会影响其他应用。

再次求软件的单独代理功能

qibaoan8 avatar Apr 26 '23 05:04 qibaoan8

+1

wk4work avatar Apr 27 '23 15:04 wk4work

0.4.1 都发布了。 代理功能还没有。

qibaoan8 avatar Apr 28 '23 05:04 qibaoan8

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox 屏幕截图 2023-05-05 140907

xiefeihong avatar May 02 '23 05:05 xiefeihong

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox

终于有前端人来搞了, 感谢🙏

yellowgg avatar May 02 '23 05:05 yellowgg

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox

不过能不能出一下各系统的安装版,我是M1

yellowgg avatar May 02 '23 05:05 yellowgg

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox

不过能不能出一下各系统的安装版,我是M1

我先去试试github的workflow

xiefeihong avatar May 02 '23 06:05 xiefeihong

后面我是用了proxifier设置规则解决 比较完美吧

watreyoung avatar May 04 '23 10:05 watreyoung

后面我是用了proxifier设置规则解决 比较完美吧

我用的proxifier设置之后无效,进程在打开chatbox的一瞬出现,之后自动closed就消失了,不知道哪里出了bug,其他的软件用proxifier就没这个问题

StudenGit avatar May 08 '23 09:05 StudenGit

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox

不过能不能出一下各系统的安装版,我是M1

我没有在github的workflow里找到m1的运行器,你试试这个行不行 https://github.com/xiefeihong/chatbox/releases/tag/v1.0.1

xiefeihong avatar May 09 '23 07:05 xiefeihong

我将这个项目fork了一下,添加了代理功能,有兴趣的话可以看看 项目地址:https://github.com/xiefeihong/chatbox

不过能不能出一下各系统的安装版,我是M1

我没有在github的workflow里找到m1的运行器,你试试这个行不行 https://github.com/xiefeihong/chatbox/releases/tag/v1.0.1

不行,报错了 image 小伙计再接再厉,开源有你贡献的一份力量 🥹

yellowgg avatar May 09 '23 09:05 yellowgg

建议还是配置下代理的规则,这其实是最通用的做法…… 如果嫌麻烦的话,也可以把 Chatbox 的 API HOST 改成 https://proxy2.chatbox.run/ ,可以解决这个“网络问题”。 至于 Chatbox 的内置代理功能,我预估最快也要半个月以后才可能有。对开源感兴趣的朋友,也欢迎给主分支做做贡献,这样才更好维护,而且用户才能享受到后续的更新。

Bin-Huang avatar Jun 05 '23 09:06 Bin-Huang

请问这个有进展了吗 谢谢

badboy-tian avatar Aug 23 '23 10:08 badboy-tian