Go to comments ↓ Home » 软件心得

Opera 自动代理解决方案和代理菜单

opera前几天把浏览器升级了,嘛,总要与时俱进。
Opera 10.70 build 9053 是我去年用得最久的版本,一直以来也挺满意。

本来打算在 Barracuda 出来前用一小段时间 11 的,但要更新的时候刚好 11.10 就出来了,于是就跳了。。。

以前发过的 Opera 代理菜单和按钮,很多人反映部分命令在 11 下失效了。
趁此机会更新下,并综合了来自其他高手的改进。

本文只是给出方案和配置,不提供任何相关工具和网址

Opera 代理解决方案介绍

这次改得比较多,我就罗嗦点。再整个介绍一次主要代理方案。

效果预览

先放一张预览和示意图:

Opera 自动代理和代理菜单

需求分析

有三种模式:

  1. 禁用代理,Direct mode,也就是直连。
  2. 自动代理,Auto  proxy mode 用的 PAC,只对符合名单内的规则使用代理。
  3. 全局代理,Global  proxy mode,网络请求都通过代理访问。这个状态又有多种 IP 和端口等。

注:这里的全局不是系统全局,而是整个浏览器程序,如此称呼是为了方便表达。

一般情况下,我们的需求是:

  1. 平时用自动代理,遇到列表之外的网站,根据是否会再次访问选择加入代理列表 or 临时使用全局代理。
  2. 在全局代理的时候可以方便的切换端口,并且对一些常去的国内站点进行忽略。
  3. 当我们完全不需要代理或者进行一些测试排查的时候。

代理方案组成

这套代理方案包含以下部分:

  • 代理按钮:能显示三种不同的模式和10种常见代理端口。点击在“禁用代理 / 启用上一次使用的代理方式”之间进行一键切换。
  • 代理切换菜单:这个菜单会方便你在三种状态和多个代理端口之间进行快速切换,还有允许代理工具、添加 PAC 规则、例外列表,以及二级菜单中的其他功能。
  • 图标包:对应的菜单条目和代理状态、端口一目了然。
  • Pac 文件:用 PAC 来实现各种浏览器通用的自动代理,比起 override.ini 的方法强太多了。

Opera 代理菜单和按钮的改进

事实上我本来打算修复 11 以上版本无法使用的问题后,只是加上自己这段时间的做出的小调整。
但发现悲伤的采购做出了几个重量级的改进,相当让人佩服。详情见:另一个代理菜单和按钮
于是就把那些也综合进来了,那么现在这个比起以前的菜单和按钮主要改进有:

  • 在命令之间添加了延迟,现在能在 Opera 11 以上版本正常工作。
  • 不常用的代理端口切换放在了二级菜单下,添加了一些代理设置的二级菜单。
  • 现在的方案中只需要一个 PAC 文件即可,便于维护。并能自动修正 PAC 路径。
  • 重新做了一套代理图标,提取自 Opera 11 的皮肤包和各种相关工具,大小统一为 22×22。
  • 新增“添加站点到自动代理规则”(在 PAC 中快速添加规则)和“添加站点到例外列表”这两个强大的命令。
  • 精简部分代码,简化菜单条目。提供多种执行方式可供选择。

其中,“在“禁用代理 / 启用上一次使用的代理方式”之间进行一键切换”、“修复 PAC 文件路径”和后面那个“添加站点到例外列表”命令来自采儿。
感谢采儿~,我们就不用多说什么了。

“添加站点到 PAC”,方法来自:在PAC中快捷添加当前网站的规则
不过和原文提供的代码有不同之处:

  1. 生成规则和加入规则合并为一个命令,因为现在只需要一个 pac 文件嘛。
  2. 不需要在弹出窗口中修改规则(不直观),跳过了手动全选和复制的操作。
  3. 加入规则并应用更改后源代码页不自动关闭,新增规则位于 pac 顶部,方便确认和修改。
  4. 无需修改 operaprefs.ini 文件(用了取巧的方法 XD)。

配置 Opera 自动代理切换方案

添加代理按钮

在同样的思路下,有四种不同的实现方式。请根据你的情况和需求选择其一。

  1. Quick Proxy 弹出新标签的方式,这是我们常见的方式,比起传统的对话框命令体验要好些。
    建议勾选“在当前标签页旁打开新标签”,这样执行完命令就不会转到其他标签去了。
  2. Quick Proxy 隐身标签方式,比起前面一种的优势在于:执行完命令之后不会在“已关闭的标签”中留下记录。但仅适用于 Opera 10.50 以上版本。
  3. Quick Proxy 后台窗口方式,通过新窗口并最小化执行的方式,来自采儿的主意,体验挺好。
    就是按太快的话比起前两种更加杯具- -,关闭窗口比起关闭标签来得麻烦嘛。
  4. Quick Proxy 隐身窗口方式,就是方式3的无痕版,但似乎反应有点慢。同样仅适用于 Opera 10.50 以上版本。

添加代理菜单

编辑operaconfig菜单配置文件,在最后添加以下代码。

主菜单,点击展开


你需要修改两处外部代理工具的路径(蓝色标注),非必需,只是影响到运行代理工具。绝对路径和相对路径均可,A.shun 这里用的是相对路径。
还有一处 PAC 文件路径(红色),这是为了速度,而且添加和编辑规则才会用到,所以就直接用绝对路径。

二级菜单 1:更多设置


需要修改一处 PAC 文件路径(红色标注),影响“手动编辑 PAC”功能。

二级菜单 2:更多端口

菜单和按钮命令都是一样的,有4种不同的执行方式。
这里限于篇幅问题,给出的代码是通用性最强的第一种方式。(不折腾的话直接跳到下一段)
你可以把代码中的:Open url in new page批量替换为下面的:(分别对应三种方式)
New private page & Go to pageNew browser window & Minimize window & Go to pageNew private browser window & Minimize window & Go to page

配置 PAC 文件

PAC 文件是个好东西,你可以在网上下载到,但这里还是建议你自己维护一个。

加上常去的几个站点即可,简单快速。而且 PAC 是各种浏览器通用的,全部浏览器指向同一个 PAC,这点很方便。
当然,网上的 list 对不喜欢折腾的人真的很方便,但由于 Opera 10.50+ 某个长期未修复的 bug,啊咧。。。

好吧,这里给出一种感觉不错的 PAC 写法。
(要使用菜单中的“添加到自动代理规则”必须配合 pac 的内容进行修改,用我这种语法的话就不用改了。)
如何修改就看里面的注释吧。

点此获取 PAC 文件写法


OK,把上面代码复制出来,保存为 pac.txt (嗯,没有看错,后缀不一定要用 pac,用 txt 是为了方便编辑。)
放到 profile\tools\ 文件夹下,没有则新建一个。

当然,这种写法还是需要自己做确认,可以适当添加点和斜杠进行优化。其他 PAC 写法自己去网上搜索吧。

注意:主菜单绿色标注的 Next line & Next line & Next line 表示在 pac 文件的第三行中粘贴新规则,根据 PAC 文件的不同做适当修改。

给 Opera 代理按钮和菜单添加图标

先下载这个图标包(17.2kb,内有17枚)。 Google code | OC 附件
把解压后的 proxy 文件夹放到你operaconfig当前使用的皮肤里面。
并编辑皮肤包中的 skin.ini,在 [Image] 段的后面添加以下代码。

点此获取代理图标的代码


当然,如果你经常换皮肤,那么建议你修改 opera/skin 里的 standard_skin.zip。

注意事项

  1. 修改菜单时,要注意保存为 UTF-8 无 BOM 格式,否则会乱码。
  2. 在保存  skin 之前,要先关闭 Opera。
  3. 如果部分命令无法正常工作,请尝试加大延迟,修改 Delay, 后面的数字。
  4. 如果启动代理工具时提示“此扩展名未注册应用程序”,那么请检查外部程序路径。

累,贴代码和按钮真是体力活 – –
我已经尽可能详细的说明了,但是要完全不动手,类似 autoproxy 和 Proxy Switchy 之类一键安装的扩展,那目前没有。

更新:
2011.02.24 夜,初稿
2011.02.25 上午,移除菜单中一个不必要的条目,文章细微调整

容我再罗嗦几句,按钮和菜单是比较直观和便于分享的形式,但不仅限于此,你完全可以把每个动作改用快捷键或手势来执行,这也是 Opera的魅力。(当然,按钮才能显示这些状态)
还有,最近把 Gravatar 头像也换成和 Twitter (@ashunyi)上一样了,欢迎围观。
用头像缓存的同学帮我更新一下吧,普遍表示不想换- -,好吧,我可能会改评论邮箱,以前就保持原样吧。

» 转载请以超链接形式注明来源:A.shun Blog » 《Opera 自动代理解决方案和代理菜单》
» 本文链接地址:http://shun.im/21451

» 本文采用 BY-NC-SA 协议进行授权。
» 建议通过 Rss( Feedly | Feedburner | Feedsky )方式及时获取更新。
  1. 我只用了最基本的,就指定个对应破土啬工具的PAC。

    不过这样PAC文件似乎只能用绝对路径,相对路经无论是下载的PAC还是按照a.shun教的那样自己写一个,opera都无法连网。

    这是我个人的问题,还是本来就是这样的??请教

    Opera 11.50 Opera 11.50 Windows 7 Windows 7
    #1
    @
    • @ny pac 无法用相对路径。其他浏览器也一样。

      我帮不了你,我只能说上面的pac是没问题的。写法很多,你可以网上在找找其他基本的。

      Opera Labs HTML5 Parser 12.00 Opera Labs HTML5 Parser 12.00 Windows XP Windows XP
    • @A.shun
      我最后定义为绝对路径解决了。

      你的pac写法没问题,没有怀疑呢,帖子写得很耐心,感谢!

      Opera 11.50 Opera 11.50 Windows 7 Windows 7
  2. shenwei37

    1.Ashun君,我用全局代理没问题。可是自动代理时不成功,正常的网站可以上,可是像U2B这种就不能上,好像就没开代理一样。
    2.为什么不把打开代理软件和设置代理端口做在一条命令里面,这样不是更方便。
    3.像opera:buttom opera:config 7z这种链接前的图标怎么加的,用插件的?
    先谢了~

    Opera 11.51 Opera 11.51 Windows XP Windows XP
    #2
    @
    • @shenwei37 1.不清楚呢,影响因素太多了,检查 pac 写法和路径吧,貌似现在的 pac 还不能 socks。
      2.有时候启动工具后,还会在多种端口进行切换,再说有些人的代理工具是开机自启动的。
      3.简单的 css,你用蜻蜓点一下就知道了。 😉

      Opera Next 12.00 Opera Next 12.00 Windows XP Windows XP
    • shenwei37

      @A.shun 搞定,果然是pac路径问题,没有仔细看文章把pac放在tools下的一个子文件夹里了。原来pac的路径写死了,谢啦瞬瞬 :roll:

      Opera 11.51 Opera 11.51 Windows XP Windows XP
  3. 如果我想不同网站走不同的端口应该怎么更改PAC呢?我尝试着改了很多次但都不成功,请指点一下,谢谢了!!

    Opera 10.10 Opera 10.10 Windows XP Windows XP
    #3
    @
    • @Darren 我这是统一用一种的写法,你也可以把每个站点分开写,也可以弄多个列表嘛。
      不太了解也说不清,搜索下吧 😈

      Opera Next 12.00 Opera Next 12.00 Windows XP Windows XP
  4. 鳌头七队

    12新版的自动代理已经不能用了,希望博主能修复

    Opera Next 12.00 Opera Next 12.00 Windows 7 Windows 7
    #4
    @
  5. a.shun提供的pac写法我这里多方面测试了,无奈不可行(我记得以前是可以的。。。)。搜索一下,发现下面这种可以,还可以定义不同站点对应的端口。供参考。
    function FindProxyForURL(url, host)
    {
    url = url.toLowerCase();
    host = host.toLowerCase();
    //代理列表,可以自己添加
    Tor="PROXY127.0.0.1:8118"
    GAE="PROXY 127.0.0.1:8000"
    FG="PROXY 127.0.0.1:8580"

    //使用代理的网站,前面为网站,后面为使用的代理,可以使用通配符
    if(shExpMatch(host, "*my.opera.com*")) return Tor;
    else if(shExpMatch(host, "*bbc.co.uk*")) return GAE;
    else if(shExpMatch(host, "*de-world.de*")) return FG;
    //其他的
    else return "Direct";
    }

    受不了fg等工具了,坚决自建pac和长开GAE,这下方便多了

    Opera 11.52 Opera 11.52 Windows 7 Windows 7
    #5
    @
    • @ny 我用着是有效的
      现在没有测试环境。
      GAE不错快,SSH 备用

      Opera Next 12.00 Opera Next 12.00 Windows XP Windows XP
  6. 代理这玩意很头疼,以前用某门,现在不能用了,导致我一个面向国外的网站被放弃。参考一下博主文章试试。

    Opera 11.52 Opera 11.52 Windows Server 2003 Windows Server 2003
    #6
    @
  7. 搞不懂啊

    那个配置文件的路径是C:\Users\GEEK\AppData\Roaming\Opera\Opera\menu\standard_menu.ini

    但是我电脑里打开到opera文件夹,就找不到menu菜单了,更不用说standard_menu.ini
    文件了,完全搞不懂啊,求助,求助。

    Opera 11.52 Opera 11.52 Windows 7 Windows 7
    #7
    @
  8. 搞不懂啊

    多谢楼上,能用pac自动切代理了,不过我的按钮只有proxy auto和disable两个状态,没有图中的菜单又是怎么回事呢?

    Opera 11.60 Opera 11.60 Windows 7 Windows 7
    #8
    @
  9. 又找到这篇文章 😮
    发现我的留言 😥 😥
    这两天的空余时间就不折腾别的了,专心搞 👿

    Google Chrome 17.0.963.46 Google Chrome 17.0.963.46 Windows XP Windows XP
    #9
    @
    • @wander
      又先看了看op的设置,发现代理设置里有:“本地服务器使用代理服务器–例外列表–只外列表中的服务器使用代理服务器”
      这样在这里添加上各种不存在的网址,再设置好代理服务器,实际测试一切正常。
      😮 这个除了不是自动代理,应该和自动代理实现的效果一样吧???

      我是纯小白,欢迎拍金砖 😕

      Opera 11.61 Opera 11.61 Windows XP Windows XP
    • @wander
      只支持根域名。这个名单导入导出的话,直接找到那个文件就可以了,似乎是override.ini

      Opera 11.61 Opera 11.61 Windows 7 Windows 7
  10. ashun,似乎PAC还可以用来去广告,跟OP的urlfilter一样不下载:
    function FindProxyForURL(url, host)
    {
    url = url.toLowerCase();
    host = host.toLowerCase();
    AdBlock="PROXY 0.0.0.0:3421"
    GAE="PROXY 127.0.0.1:8087"

    if(shExpMatch(host, "*tieb*")) return AdBlock;
    if (shExpMatch(url, "*123456*")) return AdBlock;
    else if(shExpMatch(host, "*google*")) return GAE;
    else return "Direct";
    }

    上面把域名含关键字tieba和搜索123456的结果页地址转向0.0.0.0了
    反复测试(一开始被OP的代理设置缓存搞混了,虽然不像IE要重启,不过有时要刷新多几次才能读取修改后的PAC),用shExpMatch(url, “”)过滤方式和URLfilter的效果一样。shExpMatch(host, “”)是根据主机域名来改变连接类型,“*”只通配域名部分(之前一直忽视这小点瞎折腾。。)

    用PAC去广告,其他浏览器也能用,不用理会UUID,不用关闭OP再修改,修改后刷新一下就可以了。UF干脆拿来作分析广告代码用。一个简单的文件就可以实现两种功能。虽说性能影响还不清楚,有可能这是最大的问题。

    ashun看下以上总结怎样,同时求更简洁的PAC写法,和UF一样最好了,只需在列表某部分加上通配的关键字符(当然用宏也很容易完成)。还有,用0.0.0.0还是255.255.255.0或127.0.0.1好?

    Opera 11.61 Opera 11.61 Windows 7 Windows 7
    #10
    @
  11. 又发现在PAC内加上
    OChosts="PROXY 59.151.106.253:80"
    if(shExpMatch(host, "*operachina.com*")) return OChosts;

    这样子上OC就不用改hosts了

    Opera 11.61 Opera 11.61 Windows 7 Windows 7
    #11
    @
  12. 代理并去广告的PAC出来了:http://115.com/file/dpn5a5n1

    套用的是OC上高压电的UF列表,用IE9和opera测试成功。不过网页上一块块的error提示真是难看。op估计修改自带的CSS文件就可以美化一点了。优化方面有文章提到按域名类型和长度分类。但是2700多个条目,实测PAC和UF对比打开网页速度感觉不到明显差别(包括IE9)。

    总体效果来说接近UF。在OP上能过滤更多的广告,最接近UF。在IE9上,不知为什么,如网易首页两侧的浮动广告没能去除,其他也有少许不如OP下的表现。FF少用,大概指定了位置,但是居然说代理配置错误,PAC无效。因为是照葫芦画瓢弄出来的,本身我也不怎么了解,一时间没法解决。

    如何去除Opera的错误提示页比较好,如果更改OP自带的CSS就可以,比如直接不显示或1像素高度什么的,那么相较UF过滤会留下空白区块,用PAC根本不用每个站点用CSS去掉这些空白块。相当于全局去广告CSS,出错率全看站点列表,比adblock.css好多了。不过能不能,怎么处理就不慬了,只是猜想。这里请求ashun测试下PAC,还有错误页不显示的方法。

    ashun最近比较忙,我会慢慢等回复的。

    Opera 11.61 Opera 11.61 Windows 7 Windows 7
    #12
    @
  13. 真的是太讨厌了,在百度上找类似autoproxy的Opera插件,好不容易找到这里,结果来了这么一句:“本文只是给出方案和配置,不提供任何相关工具和网址。”名称都不给出一个,我到哪里去搜索这插件。看是写了那么多,但对没接触过的新人来说,根本就看不懂。至少给个这个代理插件的名称吧。
    PS:“本文只是给出方案和配置,不提供任何相关工具和网址。”这句话算不算是掩耳盗铃呢?怕负什么责任就不要写嘛!而且,这个2y2r论坛不知和博主有没什么关系,里面的相关帖子也来这么一句,真的是shit,气死了,心中的郁闷,无以言表。。。。。

    Google Chrome 17.0.963.56 Google Chrome 17.0.963.56 Windows XP Windows XP
    #13
    @
  14. opera 12 最新版切换代理时那个网页不会自动关闭了……不知道什么原因,同样的命令在11.62下正常…………

    Opera 11.62 Opera 11.62 Windows 7 Windows 7
    #14
    @
    • yuleself

      @Lupin 对啊,我也纠结着

      Opera 12.00 Opera 12.00 Windows 7 Windows 7
    • @Lupin
      发现主菜单代码每个菜单最后都是window.close()”结尾的,只要修改成这样window.close()” & close page就可以自动关闭了,本人对这东西一点也不懂,只是看了看代码,上网搜了搜试了一下,可以使用,还没发现什么问题,也不知道这样写跟前面那个window.close() 有没有冲突。纯属误打误撞了

      Opera 12.10 Opera 12.10 Windows 8 x64 Edition Windows 8 x64 Edition
  15. 那麼多自稱高手的傢伙在玩這個瀏覽器卻沒有一個捨得寫一個自動代理插件?簡直匪夷所思。 😕

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 7 Windows 7
    #15
    @
  16. Calibrey

    Opera 更新到12.02了,改了好几次都出毛病,老大再更新一下教程吧,主要配合Goagent用啊

    Google Chrome 21.0.1180.89 Google Chrome 21.0.1180.89 Windows 8 x64 Edition Windows 8 x64 Edition
    #16
    @
  17. 你好!
    现在好多代理不能用了,召唤出来也用不上,如何自己修改代理端口?
    Item,Wallproxy – 8086=Disable proxy servers,,,,wapp & Open url in new page,”opera:config” & Delay,10 & Enable proxy servers & Go to page,”javascript:var allExc=opera.getPreference(‘Proxy’,’No Proxy Servers’),usePAC=’proxy_type.pac’,useALL=’proxy_type.all’,proxy_all=’127.0.0.1:8086′;if(allExc.indexOf(usePAC)==-1 && allExc.indexOf(useALL)==-1){allExc+=’,’+useALL}else if(allExc.indexOf(usePAC)!=-1){allExc=allExc.replace(usePAC,useALL)}opera.setPreference(‘Proxy’,’No Proxy Servers’,allExc);opera.setPreference(‘Proxy’,’Use Automatic Proxy Configuration’,0);opera.setPreference(‘Proxy’,’FTP server’,proxy_all);opera.setPreference(‘Proxy’,’Gopher server’,proxy_all);opera.setPreference(‘Proxy’,’HTTP server’,proxy_all);opera.setPreference(‘Proxy’,’HTTPS server’,proxy_all);opera.setPreference(‘Proxy’,’WAIS server’,proxy_all);window.close()”
    像这个,如果我想改成goagent,端口8087,能标出要改哪部分吗?
    二级菜单,其他代理窗口,也一样这样修改吗?
    我对语法都不懂,期待回复,拜谢~

    Opera 11.11 Opera 11.11 Windows 7 Windows 7
    #17
    @
  18. g_man1990

    @g_man1990
    要用Https了

    Opera 12.11 Opera 12.11 Windows 7 Windows 7
    #18
    @
  19. g_man1990

    Opera用GoAgent,开启SOCKS代理会出错的

    opera:config#Use SOCKS

    求JS代码,如何取消勾选Use SOCKS

    Opera 12.11 Opera 12.11 Windows 7 Windows 7
    #19
    @
  20. 夜夜無夢

    求教,我是Mac系統,按方案照做之後找不到菜單在哪裏啊……

    Opera 12.00 Opera 12.00 Mac OS X 10.6.8 Mac OS X 10.6.8
    #20
    @
  21. 为什么点切换的时候会出现一个首选项编辑器的页面?

    Opera 12.12 Opera 12.12 Windows 7 x64 Edition Windows 7 x64 Edition
    #21
    @
    • @iShare 搞定了 😆 末尾加上&close page就能在设置完成之后自动关闭那个弹出的页面了,不过不知道怎去掉socks5,用goagent如果勾上socks5是不行的

      Opera 12.12 Opera 12.12 Windows 7 x64 Edition Windows 7 x64 Edition
    • g_man1990

      @iShare
      我只能做到这一步了:
      后面加上 & Go to page, “opera:config#Use SOCKS”
      然后手动取消SOCKS,不需要重启Opera,可用。

      Opera 12.12 Opera 12.12 Windows 7 Windows 7
    • g_man1990

      @g_man1990
      发现只要代理设置那SOCKS的两个输入框置空不会出错

      Opera 12.14 Opera 12.14 Windows 7 x64 Edition Windows 7 x64 Edition
  22. g_man1990

    我做的一份精简版,需要的自取,是GoAgent代理
    解决无法自动关闭页面问题(即加上close page,谢上面的评论),低端解决SOCKS问题。很水的。
    预览:
    下载地址:http://pan.baidu.com/share/link?shareid=95571&uk=3792865206#dir/path=%2F%E5%8D%9A%E5%AE%A2%E9%99%84%E4%BB%B6

    Opera 12.12 Opera 12.12 Windows 7 Windows 7
    #22
    @
Leave a Reply to yuleself

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

点击这里取消回复。