chrome.proxy
描述
使用 chrome.proxy
API 来管理 Chrome 的代理设置。该 API 依赖于type API 的 `ChromeSetting 原型来获取和设置代理配置。
权限
proxy
# Manifest
您必须在扩展清单中声明“proxy”权限才能使用代理设置 API。例如:
{
"name": "My extension",
...
"permissions": [
"proxy"
],
...
}
# 对象和属性(Objects and properties)
代理设置在 proxy.ProxyConfig 对象中定义。根据 Chrome 的代理设置,设置可能包含 proxy.ProxyRules 或 proxy.PacScript。
# 代理模式(Proxy modes)
ProxyConfig
对象的 mode
属性决定了 Chrome 在代理使用方面的整体行为。它可以采用以下值
direct
在direct
模式下,所有连接都是直接创建的,不涉及任何代理。此模式不允许 ProxyConfig
对象中有更多参数。
auto_detect
在 auto_detect 模式下,代理配置由可从 http://wpad/wpad.dat 下载的 PAC 脚本确定。此模式不允许 ProxyConfig
对象中有更多参数。
pac_script
在 pac_script
模式下,代理配置由 PAC 脚本确定,该脚本要么从 proxy.PacScript 对象中指定的 URL 中检索,要么从 proxy.PacScript 对象中指定的数据元素中逐字取出。
fixed_servers
在 fixed_servers
模式下,代理配置编码在 proxy.ProxyRules 对象中。它的结构在代理规则中有描述。除此之外,fixed_servers
模式不允许 ProxyConfig
对象中有更多参数。
system
在system
模式下,代理配置取自操作系统。此模式不允许 ProxyConfig
对象中有更多参数。注意system
模式不同于设置无代理配置。在后一种情况下,仅当没有命令行选项影响代理配置时,Chrome 才会回退到系统设置。
# 代理规则(Proxy rules)
proxy.ProxyRules 对象可以包含 singleProxy
属性或 proxyForHttp
、proxyForHttps
、proxyForFtp
和 fallbackProxy
的子集。
在第一种情况下,HTTP、HTTPS 和 FTP 流量通过指定的代理服务器进行代理。其他流量直接发送。在后一种情况下,行为稍微微妙一些:如果为 HTTP、HTTPS 或 FTP 协议配置了代理服务器,则通过指定的服务器代理相应的流量。如果未指定此类代理服务器或流量使用与 HTTP、HTTPS 或 FTP 不同的协议,则使用 fallbackProxy。如果未指定 fallbackProxy,则直接发送流量而无需代理服务器。
# 代理服务器对象(Proxy server objects)
代理服务器在 proxy.ProxyServer 对象中配置。到代理服务器的连接(由 host
属性定义)使用在 scheme
属性中定义的协议。如果未指定scheme
,则代理连接默认为 http
。
如果没有在 proxy.ProxyServer 对象中定义post
,则post
是从方案派生的。默认端口是:
Scheme | Port |
---|---|
http | 80 |
https | 443 |
socks4 | 1080 |
socks5 | 1080 |
# 绕过列表(Bypass list)
个别服务器可能会被排除在bypassList
代理之外。此列表可能包含以下条目:
[_<scheme>_://]_<host-pattern>_[:_<port>_]
匹配所有与模式匹配的主机名_<host-pattern>_
。 头部 "."
被解释为 "*."
. 例如: "foobar.com", "*foobar.com", "*.foobar.com", "*foobar.com:99", "https://x.*.y.com:99"
.
Pattern | Matches | Does not match |
---|---|---|
".foobar.com" |
"www.foobar.com" |
"foobar.com" |
"*.foobar.com" |
"www.foobar.com" |
"foobar.com" |
"foobar.com" |
"foobar.com" |
"www.foobar.com" |
"*foobar.com" |
"foobar.com" , "www.foobar.com" , "foofoobar.com" |
[_<scheme>_://]_<ip-literal>_[:_<port>_]
匹配作为 IP 地址文字的 URL。从概念上讲,这与第一种情况类似,但有特殊情况来处理 IP 文字规范化。例如:“[0:0:0::1]
”上的匹配与“[::1]
”上的匹配相同,因为 IPv6 规范化是在内部完成的。示例:“127.0.1
”、“[0:0::1]
”、“[::1]
”、“http://[::1]:99
”。
_<ip-literal>_/_<prefix-length-in-bits>_
匹配包含给定范围内 IP 文字的任何 URL。 IP 范围是使用 CIDR 表示法指定的。示例:“192.168.1.1/16
”、“fefe:13::abc/33
”
<local>
匹配简单的主机名。简单的主机名是不包含点且不是 IP 文字的主机名。例如 example
和 localhost
是简单的主机名,而 example.com
、example
. 和 [::1]
不是。示例:“<local>
”
# 例子
以下代码为除 foobar.com
之外的所有服务器的 HTTP 连接设置 SOCKS 5 代理,并为所有其他协议使用直接连接。 这些设置适用于常规和隐身窗口,因为隐身窗口从常规窗口继承设置。另请参阅type API 文档。
var config = {
mode: "fixed_servers",
rules: {
proxyForHttp: {
scheme: "socks5",
host: "1.2.3.4"
},
bypassList: ["foobar.com"]
}
};
chrome.proxy.settings.set(
{value: config, scope: 'regular'},
function() {}
);
以下代码设置自定义 PAC 脚本。
var 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() {}
);
下一个片段查询当前有效的代理设置。有效的代理设置可以由另一个扩展或策略确定。有关详细信息,请参阅type API 文档。
chrome.proxy.settings.get(
{'incognito': false},
function(config) {
console.log(JSON.stringify(config));
}
);
请注意,传递给 set()
的value
对象与传递给 get()
回调函数的value
对象不同。后者将包含一个 rules.proxyForHttp.port
元素。
概括
Types
Properties
Events
Types
Mode
Chrome 54+
TYPE
"direct
", "auto_detect
", "pac_script
", "fixed_servers
", or "system
"
PacScript
保存代理自动配置信息的对象。恰好其中一个字段应该是非空的。
PROPERTIES
data
string optional
一个 PAC 脚本。
mandatory
boolean optional
如果为 true,无效的 PAC 脚本将阻止网络堆栈回退到直接连接。默认为假。
url
string optional
要使用的 PAC 文件的 URL。
ProxyConfig
封装完整代理配置的对象。
PROPERTIES
mode
mode
'direct' = 从不使用代理 'auto_detect' = 自动检测代理设置 'pac_script' = 使用指定的 PAC 脚本 'fixed_servers' = 手动指定代理服务器 'system' = 使用系统代理设置
pacScript
pacScript optional
此配置的代理自动配置 (PAC) 脚本。将此用于“pac_script”模式。
rules
ProxyRules optional
描述此配置的代理规则。将此用于“fixed_servers”模式。
ProxyRules
封装所有协议的代理规则集的对象。使用“singleProxy”或“proxyForHttp”、“proxyForHttps”、“proxyForFtp”和“fallbackProxy”(的子集)。
PROPERTIES
bypassList
string[] optional
不使用代理服务器连接到的服务器列表。
fallbackProxy
ProxyServer optional
用于其他任何事情的代理服务器,或者如果任何特定proxyFor。。。未指定。
proxyForFtp
ProxyServer optional
用于 FTP 请求的代理服务器。
proxyForHttp
ProxyServer optional
用于 HTTP 请求的代理服务器。
proxyForHttps
ProxyServer optional
用于 HTTPS 请求的代理服务器。
singleProxy
ProxyServer optional
用于所有基于 URL 的请求(即 http、https 和 ftp)的代理服务器。
ProxyServer
封装单个代理服务器规范的对象。
PROPERTIES
host
string
代理服务器的主机名或 IP 地址。主机名必须是 ASCII(Punycode 格式)。尚不支持 IDNA。
port
number optional
代理服务器的端口。默认为取决于方案的端口。
scheme
Scheme optional
代理服务器本身的scheme(protocol)。默认为“http”。
Scheme
Chrome 54+
TYPE
"http", "https", "quic", "socks4", or "socks5"
Properties
settings
要使用的代理设置。此设置的值是一个 ProxyConfig 对象。
TYPE
types.ChromeSetting<ProxyConfig>
Events
onProxyError
chrome.proxy.onProxyError.addListener(
callback: function,
)
通知代理错误。
PARAMETERS
callback
function{}
callback
参数如下所示:
(details: object) => void
details
object
details
string
有关错误的其他详细信息,例如 JavaScript 运行时错误。
error
string
错误描述。
fatal
boolean
如果为真,则错误是致命的,网络事务被中止。否则,将改为使用直接连接。
By.一粒技术服务.