通过命令行设置Firefox代理

45
如何通过命令行在 Windows XP/2k 上更改 Firefox 代理设置?
谢谢。
18个回答

18

代理设置存储在用户的Firefox配置文件中的prefs.js文件中。

Firefox个人资料目录和文件的路径是:

%APPDATA%\Mozilla\Firefox\Profiles\7b9ja6xv.default\prefs.js

其中"7b9ja6xv"是一个随机字符串。但是,默认配置文件的目录总是以".default"结尾。大多数情况下,通常只会有一个配置文件。

你需要的设置名称为"network.proxy.http"和"network.proxy.http_port"。

现在取决于你准备使用哪种技术来更改文件。

P.S.:如果这是关于通过登录脚本或类似方式更改一组用户的代理设置,我建议考虑使用自动代理发现(WPAD)机制的可能性。这样,你就再也不必在用户计算机上更改代理配置了。


即使使用了WPAD,您仍需要更改network.proxy.type。请参见我的答案下面 - Samuel Harmer

10

只是想以更整洁的格式发布代码… 最初由sam3344920发布

cd /D "%APPDATA%\Mozilla\Firefox\Profiles"
cd *.default
set ffile=%cd%
echo user_pref("network.proxy.http", "148.233.229.235 ");>>"%ffile%\prefs.js"
echo user_pref("network.proxy.http_port", 3128);>>"%ffile%\prefs.js"
echo user_pref("network.proxy.type", 1);>>"%ffile%\prefs.js"
set ffile=
cd %windir%

如果有人想要移除代理设置,这里有一些代码可以帮助你完成。

cd /D "%APPDATA%\Mozilla\Firefox\Profiles"
cd *.default
set ffile=%cd%
type "%ffile%\prefs.js" | findstr /v "user_pref("network.proxy.type", 1);" >"%ffile%\prefs_.js"
rename "%ffile%\prefs.js" "prefs__.js"
rename "%ffile%\prefs_.js" "prefs.js"
del "%ffile%\prefs__.js"
set ffile=
cd %windir%

说明: 代码会查找perfs.js文件,然后在其中查找"user_pref("network.proxy.type", 1);"这一行。如果找到它,就使用/v参数删除该文件。我添加重命名和删除行的原因是因为我无法找到一种覆盖文件的方法,一旦我删除了代理行。我相信有一种更高效/更安全的方法来完成这个任务...


3
我从未知道cd *.default*这样的东西是可能的——更棒的是:pushd %APPDATA%\Mozilla\Firefox\Profiles\*.default*也可以奏效。 - Martin
@xBoarder 当你需要再次使用字符串时,可以将其注释掉。不要删除,而是添加更多内容。例如:user_pref("network.proxy.type", 1);。另外,你也可以将 network.proxy.type 设置为直接连接,而不是删除它。 - m3nda

10

我认为你无法做到这一点。不过,你可以为每个代理设置创建不同的配置文件,并在运行Firefox时使用以下命令在配置文件之间切换:

firefox -no-remote -P <profilename>

5
最简单的方法是配置您的Firefox使用一个包含文件URL的PAC,然后在启动Firefox之前从命令行更改文件URL即可。这是最简单的方法,您不必编写记住prefs.js路径的脚本(随时间可能会变化)。您只需一次配置您的个人资料,然后在需要时编辑外部文件即可。

5
在启动 Firefox 之前,将文件 URL 从命令行中更改 -> 请解释或提供代码示例。 在开始 Firefox 之前,您可以通过在命令行中添加以下代码来更改文件的 URL:export MOZ_FORCE_DISABLE_E10S=1这样做将禁用 Firefox 的电解质模式,并允许您更改文件的 URL。请注意,这只是一个示例,具体实现方法取决于您的操作系统和具体任务需求。 - m3nda
请问您能否详细介绍一下什么是PAC文件以及应该如何处理?我还想了解如何启动一个新的Web会话。我不希望Firefox忽略新进程,因为它已经在运行并打开一个新标签页。 - user4466350
这个问题太老了,我会在评论中回答:将你想要的PAC文件保存到磁盘。然后在浏览器中查看它,这将强制在位置栏中创建一个正确的文件URL。复制这个值,进入你的浏览器代理偏好设置,选择PAC文件,并粘贴该URL(而不是使用更标准的“http:”或“https:”URL)。 - benc
回复:什么是PAC文件 -> https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_(PAC)_file - benc
关于Web会话->这应该是一个不同的问题吗? - benc

3

cd /D "%APPDATA%\Mozilla\Firefox\Profiles" cd *.default set ffile=%cd% echo user_pref("network.proxy.http", "%1");>>"%ffile%\prefs.js" echo user_pref("network.proxy.http_port", 3128);>>"%ffile%\prefs.js" echo user_pref("network.proxy.type", 1);>>"%ffile%\prefs.js" set ffile= cd %windir%

这很好!谢谢你写出这段代码。我需要这个Windows版本的代码。我的目标是通过先学习Linux来做到这一点,然后再学习Windows shell,但我不想这么做,所以你节省了我一些时间!

我的Linux版本在本帖子底部。我一直在试验将首选项插入哪个文件中。它似乎很挑剔。首先我试图在~/.mozilla/firefox/*.default/prefs.js 中插入,但它没有很好地加载。about:config屏幕从未显示我的更改。目前,我一直在尝试编辑实际的Firefox默认文件。如果有人能够脱口而出地知道如何重写Windows代码,只有在没有这些行时才添加它们吗?我不知道如何在Windows上做sed/awk的事情,除非首先安装Cygwin。

我唯一能够对Windows脚本进行的更改是上面引用部分中的更改。我将IP更改为%1,这样当您从命令行调用脚本时,可以给它一个选项,而不必更改文件。

#!/bin/bash
version="`firefox -v | awk '{print substr($3,1,3)}'`"
echo $version " is the version."
# Insert an ip into firefox for the proxy if there isn't one
if
! grep network.proxy.http /etc/firefox-$version/pref/firefox.js 
  then echo 'pref("network.proxy.http", "'"$1"'")";' >> /etc/firefox-$version/pref/firefox.js 
fi

# Even if there is change it to what we want
sed -i s/^.*network.proxy.http\".*$/'pref("network.proxy.http", "'"$1"')";'/  /etc/firefox-$version/pref/firefox.js 

# Set the port
if ! grep network.proxy.http_port /etc/firefox-$version/pref/firefox.js 
  then echo 'pref("network.proxy.http_port", 9980);' >> /etc/firefox-$version/pref/firefox.js 
  else sed -i s/^.*network.proxy.http_port.*$/'pref("network.proxy.http_port", 9980);'/ /etc/firefox-$version/pref/firefox.js 
fi

# Turn on the proxy
if ! grep network.proxy.type  /etc/firefox-$version/pref/firefox.js 
  then echo 'pref("network.proxy.type", 1);' >> /etc/firefox-$version/pref/firefox.js 
  else sed -i s/^.*network.proxy.type.*$/'pref("network.proxy.type", 1)";'/ /etc/firefox-$version/pref/firefox.js 
fi

sed非常好用。为了避免这种情况,有一个Firefox扩展可以让Firefox获取全局变量http_proxy=http://localhost:8080,例如。您不需要export,只需在命令前面添加它即可。例如,Chrome可以使用http_proxy=http://some-proxy-ip:port chrome httpbin.org/ip开箱即用。我不知道为什么Firefox不能处理这个。 - m3nda
将一些 $@ 参数添加到该脚本中将可以正常执行,还能支持除默认代理文件以外的其他代理。 :-) - m3nda
@erm3nda,您能具体说明您所指的扩展名是什么吗? - Rick van der Zwet
@RickvanderZwet 这个扩展使用环境变量。这是它的链接:https://addons.mozilla.org/es/firefox/addon/environment-proxy/。我没有检查它是否支持新的和标准的扩展。 - m3nda

3

您可以使用 -proxy-server 选项从命令行轻松地启动 Firefox 并使用代理服务器。

这在 Mac、Windows 和 Linux 上都可以使用。

path_to_firefox/firefox.exe -proxy-server %proxy_URL%

Mac 示例:

/Applications/Firefox.app/Contents/MacOS/firefox -proxy-server proxy.example.com


3
这不是一个有文档记录的选项,在Linux中至少无法使用。 - EricLaw
@EricLaw 有一个扩展程序可以告诉Firefox读取http_proxy环境变量,所以你可以通过http_proxy="http://midomain:port" firefox google.com这样的方式简单地链接它。最后,你可以利用gsettings包,使用gsettings set org.gnome.system.proxy来全局设置任何内容。在这里(http://dpaste.com/3BE8YK1)可以看到从Fiddler的attach.script for Linux中提取出的完整示例。 - m3nda

3
it working perfect.

cd /D "%APPDATA%\Mozilla\Firefox\Profiles"
cd *.default
set ffile=%cd%
echo user_pref("network.proxy.ftp", "YOUR_PROXY_SERVER"); >>prefs.js
echo user_pref("network.proxy.ftp_port", YOUR_PROXY_PORT); >>prefs.js
echo user_pref("network.proxy.http", "YOUR_PROXY_SERVER"); >>prefs.js
echo user_pref("network.proxy.http_port", YOUR_PROXY_PORT); >>prefs.js
echo user_pref("network.proxy.share_proxy_settings", true); >>prefs.js
echo user_pref("network.proxy.socks", "YOUR_PROXY_SERVER"); >>prefs.js
echo user_pref("network.proxy.socks_port", YOUR_PROXY_PORT); >>prefs.js
echo user_pref("network.proxy.ssl", "YOUR_PROXY_SERVER"); >>prefs.js
echo user_pref("network.proxy.ssl_port", YOUR_PROXY_PORT); >>prefs.js
echo user_pref("network.proxy.type", 1); >>prefs.js
set ffile=
cd %windir%

2
这是最终编译的解决方案,对我有效...已尝试并测试...
在Windows中通过cmd更改Mozilla Firefox代理设置的步骤
1. cd /D "%APPDATA%\Mozilla\Firefox\Profiles" 2. cd *.default
用用户定义的代理设置替换已有代理设置
3. powershell -Command "(gc prefs.js) -replace 'user_pref(\"network.proxy.http\", \"已有IP\")\;', 'user_pref(\"network.proxy.http\", \"您的http代理IP\");' | Set-Content prefs.js" 4. powershell -Command "(gc prefs.js) -replace 'user_pref(\"network.proxy.http_port\", 已有端口)\;', 'user_pref(\"network.proxy.http_port\", 您的http代理端口);' | Set-Content prefs.js" 5. powershell -Command "(gc prefs.js) -replace 'user_pref(\"network.proxy.share_proxy_settings\", 已有值)\;', 'user_pref(\"network.proxy.share_proxy_settings\", true);' | Set-Content prefs.js" 6. powershell -Command "(gc prefs.js) -replace 'user_pref(\"network.proxy.type\", 已有值)\;', 'user_pref(\"network.proxy.type\", 1);' | Set-Content prefs.js"
0-无代理 1-手动代理配置 4-自动检测代理设置 5-使用系统设置(默认)
7. cd %windir% 8. cd C:\Users\{用户名}\AppData\Roaming\Mozilla\Firefox\Profiles\sat2m7dr.default\ 9. find /i "network.proxy" prefs.js
通过CMD使用您定义的代理设置启动Firefox
12. cd C:\Program Files\ 13. cd "Mozilla Firefox" 14. firefox.exe -ProfileManager 15. 从列表中选择默认值(默认情况下选择default-release)并单击确定。
注意:您可能不必再次运行第14步。 相反,您可以直接运行firefox.exe

2

我需要设置一个额外的选项,以允许SSO直通我们的内部网站。我在上面的示例中添加了一些代码。

pushd "%APPDATA%\Mozilla\Firefox\Profiles\*.default"
echo user_pref("network.proxy.type", 4);>>prefs.js
echo user_pref("network.automatic-ntlm-auth.trusted-uris","site.domain.com, sites.domain.com");>>prefs.js
popd

1
我发现使用Windows下的PowerShell有更好的方法来完成这个任务(但实际上只是因为我正在寻找一种脚本方式来更改用户代理字符串,而不是摆弄代理)。
function set-uas
{
    Param
    (
            [string]$UAS = "Default"
    )

    $FirefoxPrefs = "C:\Users\Admin\AppData\Roaming\Mozilla\Firefox\Profiles\*.default\prefs.js"

    if ($UAS -eq "Default")
    {
        $fileinfo = type $FirefoxPrefs
        $fileinfo = $fileinfo | findstr /v "general.appname.override"    
        $fileinfo = $fileinfo | findstr /v "general.appversion.override"
        $fileinfo = $fileinfo | findstr /v "general.platform.override"  
        $fileinfo = $fileinfo | findstr /v "general.useragent.appName"  
        $fileinfo = $fileinfo | findstr /v "general.useragent.override" 
        $fileinfo = $fileinfo | findstr /v "general.useragent.vendor"   
        $fileinfo = $fileinfo | findstr /v "general.useragent.vendorSub"
        $fileinfo += "user_pref(`"useragentswitcher.import.overwrite`", false);`n"
        $fileinfo += "user_pref(`"useragentswitcher.menu.hide`", false);`n"
        $fileinfo += "user_pref(`"useragentswitcher.reset.onclose`", false);`n"
        $fileinfo | Out-File -FilePath $FirefoxPrefs -Encoding ASCII
    }
    else
    {
        set-uas Default
    }

    if ($UAS -eq "iphone")
    {
        $fileinfo = ""
        $fileinfo += "user_pref(`"general.appname.override`", `"Netscape`");`n"
        $fileinfo += "user_pref(`"general.appversion.override`", `"5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16`");`n"
        $fileinfo += "user_pref(`"general.platform.override`", `"iPhone`");`n"                                                                                                                                      
        $fileinfo += "user_pref(`"general.useragent.appName`", `"Mozilla`");`n"                                                                                                                                     
        $fileinfo += "user_pref(`"general.useragent.override`", `"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16`");`n"
        $fileinfo += "user_pref(`"general.useragent.vendor`", `"Apple Computer, Inc.`");`n"                                                                                                                         
        $fileinfo += "user_pref(`"general.useragent.vendorSub`", `"`");`n"                                                                                                                                          
        $fileinfo += "user_pref(`"useragentswitcher.reset.onclose`", false);`n"
        $fileinfo | Out-File -FilePath $FirefoxPrefs -Encoding ASCII -Append
    }
    elseif ($UAS -eq "lumia")
    {
        $fileinfo = ""
        $fileinfo += "user_pref(`"general.appname.override`", `"Netscape`");`n"
        $fileinfo += "user_pref(`"general.appversion.override`", `"9.80 (Windows Phone; Opera Mini/9.0.0/37.6652; U; en) Presto/2.12.423 Version/12.16`");`n"
        $fileinfo += "user_pref(`"general.platform.override`", `"Nokia`");`n"                                                                                                                                       
        $fileinfo += "user_pref(`"general.useragent.appName`", `"Mozilla`");`n"                                                                                                                                     
        $fileinfo += "user_pref(`"general.useragent.override`", `"Opera/9.80 (Windows Phone; Opera Mini/9.0.0/37.6652; U; en) Presto/2.12.423 Version/12.16`");`n"
        $fileinfo += "user_pref(`"general.useragent.vendor`", `"Microsoft`");`n"                                                                                                                            
        $fileinfo += "user_pref(`"general.useragent.vendorSub`", `"`");`n"                                                                                                                                          
        $fileinfo += "user_pref(`"useragentswitcher.reset.onclose`", false);`n"
        $fileinfo | Out-File -FilePath $FirefoxPrefs -Encoding ASCII -Append
    }
}

我安装了Firefox插件"useragentswitcher",并且没有在没有该插件的情况下进行测试。我还设置了"user_pref("useragentswitcher.reset.onclose", false);"。
[编辑]我已经修改了我的代码,它偶尔会输出一些坏字符或其他东西。由于某种原因,Firefox检测到这是一个损坏的配置文件,并且整个配置文件被丢弃并刷新为默认配置文件。
同时,要归功于xBoarder在他对sam3344920的回答中发布的内容(https://dev59.com/R3RA5IYBdhLWcg3wvgob#2509088),本代码松散地基于此。此外,我能够在Phoenix14830的帖子的帮助下解决编码错误(https://dev59.com/dmoy5IYBdhLWcg3wJKoq#32080395)。
[编辑2]添加了将UAS设置为lumia的支持。实际上,这使用的是Opera移动UAS,因为我仍然希望bing工作,并且如果您使用常规的lumia UAS,www.bing.com将重定向到bing://?%^&*,Firefox不知道如何处理。

嗯...现在似乎因为某种奇怪的原因在字符之间添加了一堆空值...o_0 - GarThor

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