随着市面上各种AI项目越来越多,使用AI专属浏览器可以方便收集使用各类AI产品。

简单实现

1、GPT的回答

image-1711539154003

2、根据GPT的提示使用了winform套壳的webview2来实现。其中关键 “–proxy-server” 参数的值,来源来NaiveProxy的客户端的配置文件。

if (webView21 != null)
{
       CoreWebView2EnvironmentOptions Options = new CoreWebView2EnvironmentOptions();
       Options.AdditionalBrowserArguments = "--proxy-server=socks5://127.0.0.1:18988";
       CoreWebView2Environment env =
       await CoreWebView2Environment.CreateAsync(null, null, Options);
       await webView21.EnsureCoreWebView2Async(env);
       webView21.Source = new Uri("https://chat.openai.com/", UriKind.Absolute); 
}

NaiveProxy项目

1、服务端安装过程

wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz
tar -xvzf go1.22.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
nano ~/.bashrc
export GOROOT=/usr/local/go
export GOPATH=/data/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
mkdir /data
mkdir /data/go

source ~/.bashrc
go version
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest 
xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
ls
mv caddy /usr/bin/
caddy version
  

2、下面是Caddyfile 的配置文件内容,第二、三行是为了避开caddy占用80和443 端口。其中xx.com和4431端口, user 与 yourpasswd 四个值需要客户端中使用。如果使用443端口 caddy可以自动申请证书,就不用指定证书路径了,可以用项目上的示例配置文件。

{
order forward_proxy before reverse_proxy
http_port 8080
https_port 8443
}
:4431, xx.com {
tls /path/to/xx.com.cert  /path/to/xx.com.key
forward_proxy {
basic_auth user yourpasswd
hide_ip
hide_via
probe_resistance
}
reverse_proxy https://www.hujiang.com {
header_up Host {upstream_hostport}
}
}

3、如果需要后台进程

vim /etc/systemd/system/caddy.service

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
User=root
Group=root
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

4、如果使用1024以下的端口,需要设置权限

setcap cap_net_bind_service=+ep /usr/bin/caddy

5、下载客户端 下面客户端配置文件,第一行是给定制浏览器的启动参数用的,第二行是服务端配置文件里设定的。

{
  "listen": "socks://127.0.0.1:18988",
  "proxy": "https://user:yourpass@xx.com:4431",
  "log": ""
}

6、在winform启动时,启动一个无窗口进程启动客户端navie,退出时kill 客户端进程。

           var ps =  Process.GetProcesses();
            foreach ( Process p in ps)
            {
                if (p.ProcessName == "naive") return;
            }
            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = Path.Combine(Application.StartupPath, "naive.exe"),  
                UseShellExecute = false,
                CreateNoWindow = true
            };

            try
            {
                using (Process process = new Process { StartInfo = psi })
                {
                    process.Start();
                    //process.WaitForExit();
                }
            }
            catch (Exception ex) { }

让COPILOT写故事

image