|
SpecialProxyAutoConfig
利用spac插件整合第三方/内部proxy实现完成类PAC功能.
Featured 简介
SPAC插件
CSL脚本语言
1. 打印函数 print($content):打印到标准输出
eg: print("hello,world!");
2. 获取头域值 getHeader($req, $name) : 获取HTTP请求/响应中具体头域
eg: $host = getHeader($request, "Host");
3. int转化函数 int($str): 将字符串转化为int
eg: $contentLength = int(getHeader($errorRes, "Content-Length"));
4. 调用外部程序 system($cmd): 执行外部程序
eg:$output=system("./my.sh");
5. 日志函数 log($content): 记录内容到日志文件中
eg: log("hello, world");安装使用
配置&脚本
<proxyEventServiceFactory>SPAC</proxyEventServiceFactory>
##基本只需要定义IP+port,用变量表示
##Third proxy client
$TOR="127.0.0.1:9050";
$PUFF="127.0.0.1:1984";
$MRZHANG="127.0.0.1:2010";
$APJP="127.0.0.1:10000";$SSHD="socks5:127.0.0.1:7070"; def onRoutine()
{
#Do your routine business here
#eg: $output=system("./mysh.sh");
# log($output);
#Tell the script engine to invoke this method 10s later
return 10;
}
##此示例方法在GAE的限制条件下选择PUFF作为proxy, 用户可以参考修改
def firstSelectProxy(protocol, method, url, headers)
{
#Let sshd handle https request
if $protocol=="https"
{
return $SSHD;
}
#Let phptunnel handle this situation
##Google's limit for request body size 1m
$contentLength = int(getHeader($headers, "content-length"));
if $contentLength > 1024000
{
return $PHP;
}
# Let seattle handle this situation
##Only "GET/POST/PUT/DELETE/HEAD" supported in GAE
if $method != "GET" && $method != "POST"
&& $method != "PUT" && $method != "DELETE"
&& $method != "HEAD"
{
return $SEATTLE;
}
#let tor handle this situation
##Request with body not allowed in GAE if it's not POST/PUT
if $contentLength > 0
{
if $method != "POST" && $method != "PUT"
{
return $TOR;
}
}
#defaultly, GAE is the chosen one
return $GAE;
} ##有些情况下proxy实现会出错,提供第二次选择机会(注意需要判断proxy类型,否则有死循环可能)
def reselectProxyWhenFailed(errorRes,proxy)
{
$rescode = getResponseCode($errorRes);
if $proxy == $GAE && $rescode != 503
{
return $SSHD;
}
return null;
}
|
► Sign in to add a comment
第二步看不懂
如果你有其它第三方的proxy client, 将其监听地址用任意变量表示,然后替换$PUFF为新变量名即可; 这个是一个脚本语言,语法类似C,shell,如果有unix/linux下写shell的经历的话应该比较容易理解
意思是在HYK代理失败的情况下选择第二种代理方式,比如SSH,可以自己定义
那如果是这样的话,是不是必须还得同时开启第二个代理?比如PUFF?
自然需要,不过也可以用plugin方式写一些内部proxy实现 一般是整合而不是重新实现
我觉得有快速切换代理插件+auto switch,这个没什么用。
:) 要相信,一定还有更懒的人;而且有一些JS发出的请求如果失败的话用户可能不知道的,这些都会影响用户切换的判断;auto-proxy和PAC的局限是一样
另外,这个插件存在的一部分原因也是验证这个脚本语言运行的稳定性以及hyk-proxy-client的插件体系
嗯,不错,有了这个插件,访问被wall的https网页就不会弹证书不受信任了。谢谢yinqiwen。
恩,楼主真做了一件大好事啊,谢谢了。 以后不用在tor和hyk-proxy之间切换了。
为什么不会弹证书不受信任了呢?求解
通过设置,SPAC这个插件可以自动把HTTPS请求传给其他代理(如:tor, puff, SSH), 而这些代理访问HTTPS没有证书不信任的问题。
使用这个,当然同时要打开(tor或puff或SSH)这些代理。
谢谢ls
会增加客户端的cpu占用么,目前代理程序cpu占用已经很高了,尤其是图片请求时, 如果这样还不如在浏览器使用pac脚本
CPU占用肯定会增加,但是因为只是转发,绝大部分是IO操作,所以CPU占用是微乎其微的 另外,不知道什么代理程序cpu占用很高?
能不能在服务器端运行tor啊?就是:客户端<->服务器端<->tor这样的模式?
理论/技术上均不可行
应该可以,自己在国外放个服务器
如果能集成AutoProxy?的gfwList就perfect了
回楼上:在“AutoProxy?”中新建一个名为GAE的代理,HTTP模式,主机127.0.0.1,端口48100。这样,就在使用上跟TOR、SSH没什么区别了。
和GAE混用的secondary proxy好像不能运行于socks模式,否则起到代理的作用。 作者有计划改善这个问题吗?
对不起,打错了:起到 -》起不到
see http://code.google.com/p/hyk-proxy/issues/detail?id=50
谢谢。 另外,最好还是不要强制让GUI窗口alwaysOnTheTop,至少需要提供一个选项来switch。
如何写一个类似AutoProxy?的表达式根据URL选择Proxy?
~=是通配比较,若url中含后面字符串则比较为真(暂不支持正则表达式)
if $url ~= "twitter" || $url ~= "youtube" {
}
GAE和PHP混合使用,这里应该怎么写呢?没看到如何切换到PHP代理。
把默认的$Seattle替换为$PHP