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

标签: 软件心得 Opera Proxy | 发表时间:2011-02-24 20:30 | 作者:A.shun baomian
出处:http://www.a-shun.com

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菜单配置文件,在最后添加以下代码。

主菜单,点击展开

[Quick Proxy Menu]
;Quick Proxy Menu by A.shun & 悲伤的采购
Item, 启用自动代理=Disable proxy servers,,,,proxy_pac & Open url in new page,"opera:config" & Delay,10 & Go to page,"javascript:var allExc=opera.getPreference('Proxy','No Proxy Servers'),usePAC='proxy_type.pac',useALL='proxy_type.all';if(allExc.indexOf(usePAC)==-1 && allExc.indexOf(useALL)==-1){allExc+=','+usePAC}else if(allExc.indexOf(useALL)!=-1){allExc=allExc.replace(useALL,usePAC)}opera.setPreference('Proxy','No Proxy Servers',allExc);opera.setPreference('Proxy','Use Automatic Proxy Configuration',1);opera.setPreference('Proxy','Automatic Proxy Configuration URL',opera.getPreference('User Prefs','Opera Directory')+'tools\\pac.txt');window.close()"
Item,启用全局代理=Disable proxy servers,,,,proxy_all & 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';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);window.close()"
------0
Item,添加为自动代理规则=External action,,,,add-pac| Stop & Focus address field & Copy & Delay,10 & Go to page,"javascript:var u=String('%c'),n=u.indexOf('://'),m=u.indexOf('/',n+3),u=u.slice(n+3,m);prompt('New PAC Rule for this Current Site','%%22'+u+'%%22,\n');void(0)" & Delay,10 & Copy & Cancel & Delay,10 & Go to Page,"PAC 文件的绝对路径" & Delay,10 & View document source & Switch to previous page & Close page,1 & Delay,10 & Next line & Next line & Next line & Paste & Delay,1 & Reload
Item, 添加域名到例外列表=External action,,,,Add widget|Duplicate page & Delay,10 & Go to page,"javascript:location.href='opera:config#'+location.hostname" & Delay,1 & Delay,350 & Go to page,"javascript:(function(){var hn=String(location.href).slice(13),allExc=opera.getPreference('Proxy','No Proxy Servers'),allExc_A=allExc.split(','),tempA=allExc.split(','),allExc_R=new RegExp(('^'+allExc+'$').replace(/\./g,'\\.').replace(/\*/g,'\.*').replace(/,/g,'$|^')),newExc;for(i=tempA.length-1;i>=0;i--){var temp1=new RegExp(('^'+tempA[i]+'$').replace(/\./g,'\\.').replace(/\*/g,'\.*'));if(!temp1.test(hn)){tempA.splice(i,1)}}newExc=(tempA.length>0)?prompt('Tips: 可使用通配符,例如 *.operachina.com。\n\n此站点已经在例外名单中,但可修改域名再添加。\n以下是和此域名匹配的已有规则:\n\n'+tempA.join('\n'),hn):prompt('将此站点添加到例外名单中。访问例外名单中的站点时将忽略代理服务器设置。'+'\n\n'+'可使用通配符,例如 *.operachina.com 。',hn);if(newExc!=null && /\S/.test(newExc)==true){if(!allExc_R.test(newExc)){var newExc_R=new RegExp(('^'+newExc+'$').replace(/\./g,'\\.').replace(/\*/g,'\.*')),old='\n',allExc_A=allExc.split(','),tempA=allExc_A;for(j=tempA.length-1;j>=0;j--){if(newExc_R.test(tempA[j])){old+=tempA[j]+'\n';tempA.splice(j,1)}} if(old=='\n'){allExc+=','+newExc}else{var left=confirm('以下旧规则已经被刚输入的新规则包含,是否仍然保留?\n'+old);allExc=(left)?allExc+','+newExc:tempA.join(',')+','+newExc}opera.setPreference('Proxy','No Proxy Servers',allExc);alert(newExc+' 添加完成')}else{var not2add=(newExc==hn)?'俺不是早说加过了嘛╮(╯﹏╰)╭':'哦...原来介个也已经加过了 ╮(╯▽╰)╭';alert(not2add)}}else{alert('添加已取消')}window.close()})()",1
Submenu, "更多设置", More Proxy Setting="Show popup menu,,,, "Menu Tools""
------1
Item,Privoxy / Polipo - 8118=Disable proxy servers,,,,p & 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:8118';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()"
Item,GAppProxy - 8000=Disable proxy servers,,,,gapp & 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:8000';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()"
Item,FG / FreeU - 8580=Disable proxy servers,,,,fg & 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:8580';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()"
Submenu, "其他代理端口", More Proxy Port="Show popup menu,,,, "Transfer Loading""
------2
Item, "召唤 Privoxy & SSH"="Execute program,"profile\tools\ssh\ssh.lnk" ,,,"p""
Item, "召唤 GAppProxy"="Execute program,"profile\tools\Gapp\proxy.exe",,,"gapp""


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

二级菜单 1:更多设置

[More Proxy Setting]
Item, 打开代理设置=Show preferences,22,,,Menu tools & Delay,1 & Show proxy servers
Item,手动编辑 PAC=External action,,,,Mail Draft|Go to page,"PAC 文件的绝对路径" & Delay,1 & View document source & Switch to previous page & Close page,1
------0
Item, "对指定站点忽略代理设置"=Set preference, "Proxy|No Proxy Servers Check=1",, | Set preference, "Proxy|No Proxy Servers Check=0"
Item, "为代理启用 HTTP 1.1"=Set preference, "Proxy|Enable HTTP 1.1 for proxy=1",, | Set preference, "Proxy|Enable HTTP 1.1 for proxy=0"
Item, "本地服务器不启用代理"=Set preference, "Proxy|Use Proxy On Local Names Check=0",, | Set preference, "Proxy|Use Proxy On Local Names Check=1"
------1
Item, 测试网址是否撞墙=Go to page, "http://autoproxy2pac.appspot.com/gfwtest#%u",,,"Menu Contacts"
Item, "查看当前 IP"="Go to page, "http://www.ip-adress.com/",,,"Contact0""


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

二级菜单 2:更多端口

[More Proxy Port]
Item,Wujie - 9666=Disable proxy servers,,,,wj & 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:9666';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()"
Item,Puff - 1984=Disable proxy servers,,,,puff & 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:1984';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()"
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()"
Item,Hyk-proxy - 48100=Disable proxy servers,,,,hyk & 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:48100';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()"
Item,Witopia - 1234=Disable proxy servers,,,,wito & 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:1234';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()"
Item,Gtunnl - 8081=Disable proxy servers,,,,gtu & 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:8081';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()"

菜单和按钮命令都是一样的,有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 文件写法

function FindProxyForURL(url, host){
var Proxy="PROXY 127.0.0.1:8118;PROXY 127.0.0.1:8000;PROXY 127.0.0.1:8580";//代理类型、IP、端口,多个用分号分隔
var list = new Array( //使用自动代理的网站列表 Begin
//上面是新增的列表
"twitter.com",
"twimg.com",
"youtube.com",
"ytimg.com"
//使用自动代理的网站列表 End
);
for (i in list) {
if(shExpMatch(url.toLowerCase(),"*" + list[i].toLowerCase() + "*")){return Proxy;};
};
return "DIRECT";
};


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] 段的后面添加以下代码。

点此获取代理图标的代码

;--- Quick Proxy by A.shun ---
wj=proxy/wj.png
fg=proxy/fg.png
tor=proxy/tor.png
puff=proxy/puff.png
gtu=proxy/gtu.png
gapp=proxy/gapp.png
fu=proxy/fu.png
p=proxy/p.png
proxo=proxy/proxo.png
wito=proxy/wito.png
hyk=proxy/hyk.png
wapp=proxy/wapp.png
proxy_all=proxy/proxy_all.png
proxy_auto=proxy/proxy_auto.png
proxy_no=proxy/proxy_no.png
proxy_pac=proxy/proxy_pac.png
add-pac=proxy/add-pac.png


当然,如果你经常换皮肤,那么建议你修改 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://www.a-shun.com/archives/21451.html

© A.shun Blog 2009-2010 | 发表评论 | 阅读评论 | Twitter | 0b509d655a529f3b7820d7fb7e63fb0e

相关 [opera 代理 代理] 推荐:

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

- baomian - A.shun Blog
前几天把浏览器升级了,嘛,总要与时俱进. Opera 10.70 build 9053 是我去年用得最久的版本,一直以来也挺满意. 本来打算在 Barracuda 出来前用一小段时间 11 的,但要更新的时候刚好 11.10 就出来了,于是就跳了. 以前发过的 Opera 代理菜单和按钮,很多人反映部分命令在 11 下失效了.

Chrome for Android 也将具备 Opera Mobile 和 Amazon Silk 那种代理服务器压缩加速功能

- - 谷奥——探寻谷歌的奥秘
现在Google既有Android移动操作系统,又拥有Chrome for Android浏览器,那么二者结合来提供类似Opera Mobile 和 Amazon Silk 那种代理服务器压缩加速功能就是顺理成章的事情了,其实以前他们就有Google Web Accelerator,只不过后来被重组了.

Opera 11.10 snapshot 2076 发布

- Dolphin - cnBeta.COM
Opera 11.10 snapshot 2076 发布,本版将Presto 引擎升级至 2.8.130,并修复了一些快速拨号及Windows 安装包问题. 但这是一个开发版,不推荐普通用户使用,仅供测试. 此版本存在着很多已知问题,可能会造成崩溃或者数据丢失,甚至无法正常使用. 请勿覆盖之前 的版本,并在备份数据后安装使用.

CGLib动态代理

- - ITeye博客
      由于JDK创建代理有一个限制,它只能为接口创建代理实例,那么对于没有通过接口定义业务方法的类,如何动态创建代理实例呢. 显然CGLib是一个很好的选择,CGLib采有底层的字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用. 下面就看一下CGLib如何实现动态代理吧.

java 动态代理(Proxy)

- - BlogJava_首页
动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实,代理对象对客户隐藏了实际对象. 动态代理可以对请求进行其他的一些处理,在不允许直接访问某些类,. 或需要对访问做一些特殊处理等,这时候可以考虑使用代理. 目前 Java 开发包中提供了对动态代理的支持,但现在只支持对接口的实现. 主要是通过 java.lang.reflect.Proxy 类和 java.lang.reflect.InvocationHandler 接口.

Dynamic Proxy (动态代理)

- - CSDN博客推荐文章
动态代理主要有一个 Proxy类 和一个 InvocationHandler接口. 真实主题角色(实现了抽象主题接口). 动态代理主题角色(实现了 InvocationHandler接口,并实现了 invoke()方法). Proxy 要调用 newProxyInstance方法. 1.抽象主题角色 SubjectDemo.java.

[翻译]web代理链

- - 互联网 - ITeye博客
原文地址: http://resources.infosecinstitute.com/chaining-web-proxies-to-overcome-limitations/. 现在有很多web代理,它们可以无缝隙的工作. 但是由于某些功能不支持,或含有某个bug,所以存在局限性. 因此我们可以使用两个代理来绕过这些局限.

Redis 代理服务Twemproxy

- - CSDN博客云计算推荐文章
      当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性. 虽然Redis 2.6版本已经发布Redis Cluster,但还不是很成熟适用正式生产环境.  Redis 的 Cluster 方案还没有正式推出之前,我们通过 Proxy 的方式来实现集群存储.

JDK动态代理机制

- - CSDN博客编程语言推荐文章
    代理模式有两种,一种是静态代理,这种方式需要为每一个被代理类写一个代理类,显示比较麻烦. 还一种是动态代理,动态代理实现方式一般有两种,JDK动态代理与CGLIB动态代理,这里说一下对JDK动态代理的理解.     JDK动态代理最核心的就类就是java.lang.reflect.Proxy,可调用Proxy.newInstance(..)生成动态代理.

GIT透过代理下载

- - 研发管理 - ITeye博客
如何通过代理clone GIT的代码. 如果你所在的网络需要代理访问网络,那你可以设置git代理服务器. 注意前缀要修改为HTTP(原来是GIT). 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.