Reading view

There are new articles available, click to refresh the page.

如何使用 Proxifier 来进行流量代理控制

Proxifier 是一款网络工具软件,可以帮助用户通过代理服务器进行网络访问,实现匿名化、翻墙、加速等功能。支持多种代理协议,规则管理,流量监控和日志记录等功能,提高网络连接的灵活性和智能化。注意 Proxifier 本身并不是一个代理软件,也不是一个 VPN 软件,其作用是控制其他其他软件访问代理的方式。

上一篇文章我提到了可以试用 Proxifier 来解决通过 Shadowsocks 代理访问呢 ChatGPT 频繁出现 Something Went Wrong 的问题,在本文中我们来展开讲一下具体的做法。

1 准备工作

1.1 软件下载

Proxifier 的官方网站是 https://www.proxifier.com/,其正版价格较贵,约 40 美元。不过,较早的 2.x 版本存在破解版。读者可以根据自己的经济状况来选择。

1.2 代理准备

如同开头提到,Proxifer 本身不是一个代理程序,读者应该自己提前准备好代理。这些代理中,无论是 Shadowsocks、V2Ray 还是其他常见的代理程序,都会在客户端本地重建一个 Socks5 代理,这一般都可以在代理客户端程序的配置或者服务器设置中看到。下图给出的是 Shadowsocks-NG 客户端在 macOS 中的系统配置,可以看到程序在本地 (localhost) 的 1086 端口创建了一个 Socks5 代理。

这个代理会被进一步转成 http 代理,从而被浏览器使用,这个转换过程是导致 ChatGPT 链接不稳定的元凶。接下来我们要使用 Proxifier 让 ChatGPT 直接使用 Socks5 代理。

2 设置 Proxifier

2.1 添加代理

我们以知乎上这篇文章为范本简要讲一下设置过程。首先我们需要将现有代理软件提供的 Socks5 服务告知 Proxifier,这通过添加代理服务器实现。

注意一般各种代理软件在本地创建的代理都是无需验证的,我们可以取消验证启用。输入设置之后,可以点击检查确认设置是否正确。

3 设置规则

为了让 ChatGPT 的访问能够通过 Proxifier 访问代理,我们需要配置 Proxifier 的代理规则。

添加代理规则的页面如下:

我们有两种方法引导 ChatGPT 的网络访问:

  1. 我们可以选择下载 ChatGPT Desktop 客户端,然后通过代理规则中应用程序过滤规则找到 ChatGPT 程序,然后让目标主机为空(这意味着所有的目标主机都会服从本规则);
  2. 将应用程序部分置空,然后在目标主机中填入 ChatGPT 访问的域名。经过我的试验发现,填入 chat.openai.com; challenges.cloudflare.com; *.openai.com; 即可。

事实上,因为 Proxifier 能够全局性地处理所有网络访问,因此,第二种方法对于使用 ChatGPT Desktop 的用户来说同样有效。下图是完整代理规则。

至此我们就完成了设置,你可能需要重启浏览器才能能让 Proxifier 成功地引导 ChatGPT 的流量。

使用 Shadowsocks 访问 ChatGPT 频繁出现 Something Went Wrong 问题的解决方法

update at 2023.4.27:

Github 上有人做了一个开源的油猴脚本 KeepChatGPT 可以解决这个问题。在浏览器上这个脚本可以正常使用,但是注入到客户端时(尽管内部仍然是一个浏览器)会出现错误。

update at 2023.4.12:

在 Windows 上这套方法存在一定的问题。可能的原因是 Proxifier 的代理权限有时候会被 Shadowsocks 客户端,也就是 Privoxy 争抢。

由于国情原因我们使用使用 ChatGPT 需要使用各种形式的代理,这时我们肯能会发现在与 ChatGPT 对话的过程中可能会出现下面的错误:

Something went wrong. If this issue presists please contact us through our help center at help.openai.com

这种错误一般在我们再让网页空闲一段时间(通常是一分钟)后再次提问时出现。当然,去 OpenAI 的帮助中心是不会搜到什么有用的信息的。如果你去检索这个问题,你能得到的最好答案是在出现这个页面之后刷新页面,然后回到对话窗口继续对话即可。但是刷新后如果再次出现空闲窗口的情况,这个问题会反复出现,因此你在对话中就不得不反复地刷新页面,再加上每次页面重载你都需要去勾选 Cloudflare 的机器人验证框,这就会极大程度上拖慢我们的速度,影响产品体验。

这个问题是否可能是由于我翻墙访问导致的呢?我使用的翻墙软件是 Shadowsocks,经过一番搜索,一个 Github Issue 的讨论给了我灵感。

讨论地址:https://github.com/shadowsocks/shadowsocks-libev/issues/2149

尽管讨论的题目和 ChatGPT 没有直接关系,但是这个回复提到,Shadowsocks 在构建代理管道时,会在客户端使用 Privoxy 来讲 Socks5 代理转换成 http 代理,进而被浏览器使用。Privoxy 的配置中包含了 Socket 连接时长方面的控制。于是我查看了我本地的 Shadowsocks 使用的 Privoxy 的配置文件,这个文件在 MacOS 中位于 /Users/lena/Library/Application Support/ShadowsocksX-NG/privoxy.config 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
toggle  1
enable-remote-toggle 1
enable-remote-http-toggle 1
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 60

forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
forward [FE80::/64] .
forward [::1] .
forward [FD00::/8] .
forward-socks5 / 127.0.0.1:1086 .

# Put user privoxy config line in this file.
# Ref: https://www.privoxy.org/user-manual/index.html

可以看到 keep-alive-timeoutsocket-timeout 这两个选项设定的超时时间都比较低。我做了下面两个尝试:

  1. 将这两个设置调高,并重启 Shadowsocks,但随后发现 Privoxy 重置了设置文件;
  2. 我手动 kill 掉正在运行的 Privoxy 并且手动使用更新后的 config 文件调起一个新的进程,但是仍然没有解决 Something went wrong 的问题;

至此,我也不想和 Privoxy 纠缠下去,既然问题出在 Socks5 代理转 Http 代理的环节,我们可以使用 Proxifier 这个软件直接使用 Shadowsocks 提供的 Socks5 代理,就可以很好地解决这个问题。

Proxifier 的教程网上非常多,我就不在这篇文章里赘述了。

Proxifier 的使用参加我的文章:如何使用 Proxifier 来进行流量代理控制

❌