Opera 自动代理解决方案和代理菜单
前几天把浏览器升级了,嘛,总要与时俱进。
Opera 10.70 build 9053 是我去年用得最久的版本,一直以来也挺满意。
本来打算在 Barracuda 出来前用一小段时间 11 的,但要更新的时候刚好 11.10 就出来了,于是就跳了。。。
以前发过的 Opera 代理菜单和按钮,很多人反映部分命令在 11 下失效了。
趁此机会更新下,并综合了来自其他高手的改进。
本文只是给出方案和配置,不提供任何相关工具和网址。
Opera 代理解决方案介绍
这次改得比较多,我就罗嗦点。再整个介绍一次主要代理方案。
效果预览
先放一张预览和示意图:
需求分析
有三种模式:
- 禁用代理,Direct mode,也就是直连。
- 自动代理,Auto proxy mode 用的 PAC,只对符合名单内的规则使用代理。
- 全局代理,Global proxy mode,网络请求都通过代理访问。这个状态又有多种 IP 和端口等。
注:这里的全局不是系统全局,而是整个浏览器程序,如此称呼是为了方便表达。
一般情况下,我们的需求是:
- 平时用自动代理,遇到列表之外的网站,根据是否会再次访问选择加入代理列表 or 临时使用全局代理。
- 在全局代理的时候可以方便的切换端口,并且对一些常去的国内站点进行忽略。
- 当我们完全不需要代理或者进行一些测试排查的时候。
代理方案组成
这套代理方案包含以下部分:
- 代理按钮:能显示三种不同的模式和10种常见代理端口。点击在“禁用代理 / 启用上一次使用的代理方式”之间进行一键切换。
- 代理切换菜单:这个菜单会方便你在三种状态和多个代理端口之间进行快速切换,还有允许代理工具、添加 PAC 规则、例外列表,以及二级菜单中的其他功能。
- 图标包:对应的菜单条目和代理状态、端口一目了然。
- Pac 文件:用 PAC 来实现各种浏览器通用的自动代理,比起 override.ini 的方法强太多了。
Opera 代理菜单和按钮的改进
事实上我本来打算修复 11 以上版本无法使用的问题后,只是加上自己这段时间的做出的小调整。
但发现悲伤的采购做出了几个重量级的改进,相当让人佩服。详情见:另一个代理菜单和按钮
于是就把那些也综合进来了,那么现在这个比起以前的菜单和按钮主要改进有:
- 在命令之间添加了延迟,现在能在 Opera 11 以上版本正常工作。
- 不常用的代理端口切换放在了二级菜单下,添加了一些代理设置的二级菜单。
- 现在的方案中只需要一个 PAC 文件即可,便于维护。并能自动修正 PAC 路径。
- 重新做了一套代理图标,提取自 Opera 11 的皮肤包和各种相关工具,大小统一为 22×22。
- 新增“添加站点到自动代理规则”(在 PAC 中快速添加规则)和“添加站点到例外列表”这两个强大的命令。
- 精简部分代码,简化菜单条目。提供多种执行方式可供选择。
其中,“在“禁用代理 / 启用上一次使用的代理方式”之间进行一键切换”、“修复 PAC 文件路径”和后面那个“添加站点到例外列表”命令来自采儿。
感谢采儿~,我们就不用多说什么了。
“添加站点到 PAC”,方法来自:在PAC中快捷添加当前网站的规则
不过和原文提供的代码有不同之处:
- 生成规则和加入规则合并为一个命令,因为现在只需要一个 pac 文件嘛。
- 不需要在弹出窗口中修改规则(不直观),跳过了手动全选和复制的操作。
- 加入规则并应用更改后源代码页不自动关闭,新增规则位于 pac 顶部,方便确认和修改。
- 无需修改 operaprefs.ini 文件(用了取巧的方法 XD)。
配置 Opera 自动代理切换方案
添加代理按钮
在同样的思路下,有四种不同的实现方式。请根据你的情况和需求选择其一。
- Quick Proxy 弹出新标签的方式,这是我们常见的方式,比起传统的对话框命令体验要好些。
建议勾选“在当前标签页旁打开新标签”,这样执行完命令就不会转到其他标签去了。 - Quick Proxy 隐身标签方式,比起前面一种的优势在于:执行完命令之后不会在“已关闭的标签”中留下记录。但仅适用于 Opera 10.50 以上版本。
- Quick Proxy 后台窗口方式,通过新窗口并最小化执行的方式,来自采儿的主意,体验挺好。
就是按太快的话比起前两种更加杯具- -,关闭窗口比起关闭标签来得麻烦嘛。 - Quick Proxy 隐身窗口方式,就是方式3的无痕版,但似乎反应有点慢。同样仅适用于 Opera 10.50 以上版本。
添加代理菜单
编辑菜单配置文件,在最后添加以下代码。
主菜单,点击展开
[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 page
New browser window & Minimize window & Go to page
New 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 文件夹放到你当前使用的皮肤里面。
并编辑皮肤包中的 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。
注意事项
- 修改菜单时,要注意保存为 UTF-8 无 BOM 格式,否则会乱码。
- 在保存 skin 之前,要先关闭 Opera。
- 如果部分命令无法正常工作,请尝试加大延迟,修改 Delay, 后面的数字。
- 如果启动代理工具时提示“此扩展名未注册应用程序”,那么请检查外部程序路径。
累,贴代码和按钮真是体力活 – -
我已经尽可能详细的说明了,但是要完全不动手,类似 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