繁体   English   中英

在chrome扩展中添加或删除基于url的代理

[英]Add or remove proxy based on url in chrome extension

我只想通过我的 chrome 扩展代理某些域,但我需要对当前的 url 进行一些检查,以决定是否需要代理。

chrome.webRequest.onBeforeRequest.addListener(function(d){
    chrome.proxy.settings.set({value: getProxyConfig(d.url), scope: 'regular'},function() {});

},{urls:[
    "http://*/*",
    "https://*/*"]},
["blocking"]);

function getProxyConfig(d.url)是一个简单的 function ,它将基于 Z572D4E421E5E6BB711D815E8A 返回适当的 ProxyConfig 对象(模式是directfixed_servers function 不进行任何外部调用,只是从本地存储中获取域列表并进行比较。

问题是什么?

Chrome 尝试代理一些应该被代理的 url,导致ERR_TUNNEL_CONNECTION_FAILED因为代理将只允许代理特定域。如果我将getProxyConfig(d.url) output 记录到控制台以获取正在下降的 url,我会看到模式与预期一样直接。注意:html 页面可能包含必须/不得代理的两个链接。

chrome.proxy.settings.set是异步的,所以我想也许chrome.webRequest.onBeforeRequestchrome.proxy.settings.set之前执行完毕

在发出请求时,您无法自动修改代理。 您必须创建一个自定义 PAC 脚本,该脚本决定是否代理 URL:

const config = {
  mode: "pac_script",
  pacScript: {
    data: "function FindProxyForURL(url, host) {\n" +
        "  if (host == 'foobar.com')\n" +
        "    return 'PROXY blackhole:80';\n" +
        "  return 'DIRECT';\n" +
        "}"
  }
}
chrome.proxy.settings.set(
  {value: config, scope: 'regular'},
  function() {}
)

关于chrome.webRequest.onBeforeRequest ,这在设置代理之后调用,因此您将在那里获得isProxy属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM