一起来做 Chrome 扩展之使用代理 proxy - 文章教程

一起来做 Chrome 扩展之使用代理 proxy

发布于 2021-11-25 字数 2848 浏览 826 评论 0

在这么一个高墙林立的地方,不会翻墙肯定是不行的,所以这次就来看看 chrome extension 如何简单的控制 chrome 代理的。

方法

chrome.proxy.settings.set({value: {}, scope: 'regular'},function() {});

这是文档里的方法,很简单,当然要控制代理,还得加一些东西,比如 value 对应的值

var config = {
	mode: "pac_script",
	pacScript: {
		data: pac
	}
};

config.mode 表明使用的是 pac_script,什么是 pac_script,可以看看 维基百科:代理自动配置,可以把它简单的理解为一个 JS 函数,FindProxyForURL(url, host),也就是 pacScript.data 对应的值。它虽然是一个 JS 函数,但是是以字符串的形式传给它的。具体情况如下:

var pac = "var FindProxyForURL = function(url, host){"+
	"if(shExpMatch(url, '*amazon\.com*')){"+
		"return 'PROXY 192.168.0.1:9000';"+
	"}"+
	"return 'DIRECT'"+
"}";

很好理解的代码,如果匹配到 amazon.com 就使用代理 192.18.0.1:9000,如果没有匹配到,直接返回,等于是什么都不做。shExpMatch 函数用来匹配 url 或者 host,匹配的方式和 DOS 的通配符相似,如果有多个匹配,直接写或||就可以了,如要匹配 amazon.com 和 google.com

var pac = "var FindProxyForURL = function(url, host){"+
	"if(shExpMatch(url, '*amazon\.com*')||"+
		"shsExpMatch(url, '*google\.com*')"+
	"){"+
		"return 'PROXY 192.168.0.1:9000';"+
	"}"+
	"return 'DIRECT'"+
"}";

这样,把它们结合一下,写成一个方法 setProxy()

function setProxy(){
	var pac = "var FindProxyForURL = function(url, host){"+
		"if(shExpMatch(url, '*amazon\.com*')||"+
			"shsExpMatch(url, '*google\.com*')"+
		"){"+
			"return 'PROXY 192.168.0.1:9000';"+
		"}"+
		"return 'DIRECT'"+
	"}";

	var config = {
		mode: "pac_script",
		pacScript: {
			data: pac
		}
	}

	chrome.proxy.settings.set({value: config, scope: 'regular'}, function(){});
}

在 background 中调用一下 setProxy() 方法,就启用了代理配置,如果打开 amazon.com 或是 google.com,就会使用代理去打开,如果是其它网站,就不使用代理。

如何切换代理

代理已经可以正常使用了,那如果有多个代理,怎么切换呢?其实很简单,结合上一篇 《本地存储localStorage》 闭着眼睛也能想到,使用 localStorage 来存储代理信息不就行了,把IP和端口转给 setProxy,加执行一下 setProxy 方法,就直接切换了代理。所以加上参数或使用全局变量都可以解决这个问题。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!

关于作者

柳絮泡泡

这个人比较懒,什么都没有填写!

1 文章
0 评论
597 人气
更多

推荐作者

qianbiandeboy

文章 0 评论 0

少女净妖师

文章 2 评论 0

zangqw

文章 0 评论 0

qq_7HKsl

文章 0 评论 0

伪装你

文章 1 评论 0