Python生成"快速"(理论上,但实际测试发现更慢)匹配的浏览器PAC文件
首先感谢astolia提供思路
顺便问如何测试浏览器PAC的实际性能?
测试方法
代码: 全选
import sys
import json
def add_domain(domain):
sub_domains=domain.rstrip('\n').split('.')
if len(sub_domains):
sub_domains.reverse()
#last sub domain dictionary
last_sub_domain_dict={}
#last sub domain
last_sub_domain=''
#current sub domain dictionary
cur_domain_dict=domains_dict
for sub_domain in sub_domains:
last_sub_domain=sub_domain
last_sub_domain_dict=cur_domain_dict
if sub_domain not in cur_domain_dict:
cur_domain_dict[sub_domain]={}
elif type(cur_domain_dict[sub_domain])!=dict:
cur_domain_dict[sub_domain]={}
cur_domain_dict=cur_domain_dict[sub_domain]
last_sub_domain_dict[last_sub_domain]=0
domains_dict={}
with open('./domains_list') as domains_list_file:
for domain in domains_list_file:
add_domain(domain)
with open('./pac_template.pac') as pac_template_file:
pac_out=pac_template_file.read()
pac_out=pac_out.replace('__DOMAINS__',json.dumps(domains_dict))
with open('./my_pac.pac','w') as pac_out_file:
pac_out_file.write(pac_out)
生成模板(更自gfwlist2pac):
代码: 全选
var proxy = "PROXY 127.0.0.1:80";
var domains = __DOMAINS__;
var direct = 'DIRECT;';
function FindProxyForURL(url, host) {
var sub_domains_array=host.split('.');
sub_domains_array.reverse();
sub_domains_array_length=sub_domains_array.length
cur_sub_domain=domains
for(var i=0;i<sub_domains_array_length;i++)
{
cur_sub_domain=cur_sub_domain[sub_domains_array[i]];
if(cur_sub_domain==0)
return proxy;
else if(cur_sub_domain==null)
return direct;
}
return direct;
}