如何通过编程方式更改Firefox代理设置?

12
我正在通过命令行启动Firefox,并且我希望使用代理启动特定的Firefox配置文件。根据Stackoverflow上的这个回答,Firefox代理设置存储在Firefox配置文件夹中的pref.js中,并且必须编辑此文件以使用代理启动FF。
我已按以下方式编辑了该文件:
user_pref("network.proxy.ftp", "1.0.0.1");
user_pref("network.proxy.ftp_port", 00000);
user_pref("network.proxy.gopher", "1.0.0.1");
user_pref("network.proxy.gopher_port", 00000);
user_pref("network.proxy.http", "1.0.0.1");
user_pref("network.proxy.http_port", 22222);
user_pref("network.proxy.no_proxies_on", "localhost, 1.0.0.1");
user_pref("network.proxy.socks", "1.0.0.1");
user_pref("network.proxy.socks_port", 00000);
user_pref("network.proxy.ssl", "1.0.0.1");
user_pref("network.proxy.ssl_port", 00000);
user_pref("network.proxy.type", 1);

注意:上面使用的IP地址和端口仅供演示目的。

但是我遇到了两个问题:

1) Firefox完全忽略这些设置,没有任何代理就启动了FF

2) 当Firefox退出时,文本修改将被还原/删除

注意:当我编辑上面的文本文件时,Firefox没有运行。我知道在prefs.js的顶部有一个免责声明:

如果您在应用程序运行时更改此文件,则应用程序退出时会覆盖更改。

但是当我编辑上述文件时,没有现成的Firefox实例。

手动创建不同的FF配置文件(如另一个用户建议的那样)以使用不同的代理不是一种选择,因为所有事情都需要以编程方式完成,而不需要手动干预。

Firefox是否仍然支持通过pref.js链接代理? 如果不支持,使用Java从命令行启动Firefox并带有代理的当前工作解决方案是什么?

谢谢

1个回答

9
一个自动代理配置文件就是你要找的东西。
文档在这里 定义一个名为name.pac的文件,其中包含javascript函数。
function FindProxyForURL(url, host)

在文件内,您可以使用任何JavaScript来决定使用哪个代理。在Firefox设置中,将路径设置为您的.pac文件,位于自动配置代理下。请记住使用文件网址。

要设置自动文件切换,只需将Firefox配置为指向单个文件,并在每次需要更改时程序化地覆盖该文件。您可以保留所有选项的副本,并在运行之前将一个选项文件复制到目标文件中。

以下是一个超级简单的PAC文件示例:

function FindProxyForURL (url, host) {
  return 'PROXY proxy.example.com:8080; DIRECT';
}

对于所有终端点,它将始终返回相同的代理。

密码在pac标准中不受明确支持,但有不同的方法来处理这个问题。如果Firefox认为需要登录,它会提示您进行登录,您还可以将密码嵌入到url中(username:password@proxy.example.com)。此外,像代理登录自动化程序这样的工具可以让您使用密码并动态设置代理,而无需与Firefox争执。


谢谢您的回复。我该如何告诉FF在启动时使用特定的pac文件?我需要在Java中自动执行此操作,而无需手动干预。如果我需要手动设置.pac路径,则会失去目的。另外,如果您可以共享.pac文件的示例配置,其中所有请求都转发到代理服务器(如我的OP中所述),那将非常有帮助。最后,我假设还可以向.pac文件添加密码(用于代理)?请更新答案以回答这些问题,我将在今晚稍后接受并授予奖励。谢谢! - alpha1
感谢您的更新。 "要设置自动文件切换,只需配置Firefox指向单个文件"。 我该如何通过编程方式配置FF指向单个pac文件?如果我需要手动配置FF指向所述文件,则会失去其目的。是否有一种在Java中以编程方式实现此功能的方法?顺便说一句,我已赞同答案。 - alpha1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接