<html> <head> <title>AnyProxy</title> <link rel="stylesheet" type="text/css" href="/dest/index.css"> <link rel="shortcut icon" type="image/png" href="/favico.png?t=2" /> <meta name="description" content="A fully configurable proxy in NodeJS, which can handle HTTPS requests perfectly."> <meta name="description" content="AnyProxy - 开放式的HTTP/HTTPS代理,你可以灵活控制各种网络数据"> <meta name="keywords" content="代理服务器 Proxy HTTP HTTPS"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <script> //redirect to Chinese version if in China if(new Date().getTimezoneOffset() == "-480" && !(/(cn|en)/i.test(location.href))){ location.href = "/cn"; }else{ var _hmt = _hmt || []; (function() {var hm = document.createElement("script"); hm.src = "//hm.baidu.com/hm.js?4e51565b7d471fd6623c163a8fd79e07"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); } </script> </head> <body> <div class="wrapper"> <div class="cornerBtnWrapper"> <a href="/cn">中文</a>| <a href="/en">English</a>| <a href="https://github.com/alibaba/anyproxy" target="_blank">View on Github</a> </div> <div class="brief"> <div class="logo"> <img src="http://gtms04.alicdn.com/tps/i4/TB1XfxDHpXXXXXpapXX20ySQVXX-512-512.png" width="250" height="250" alt="anyproxy logo" /> </div> <h2 class="slogan">AnyProxy 4.x版正在Beta中,欢迎试用 Ref:<a href="/4.x/">AnyProxy 4.x 文档</a></h2> <div class="action"> <iframe src="https://ghbtns.com/github-btn.html?user=alibaba&repo=anyproxy&type=star&count=true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> <iframe src="https://ghbtns.com/github-btn.html?user=alibaba&repo=anyproxy&type=fork&count=true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> </div> </div> <div class="feature"> <div class="featureContent"> <div class="item"> <span class="iconWrapper"> <i class="iconfont"></i> </span> <h4>基于Node.js</h4> <h5>全程JavaScript,学习无压力</h5> </div> <div class="item"> <span class="iconWrapper"> <i class="iconfont"></i> </span> <h4>支持Https</h4> <h5>明文解析Https请求数据<a href="https://github.com/alibaba/anyproxy/wiki/HTTPS%E7%9B%B8%E5%85%B3%E6%95%99%E7%A8%8B" target="_blank"><br>如何配置 >></a></h5> </div> <div class="item"> <span class="iconWrapper"> <i class="iconfont bigger"></i> </span> <h4>Web界面</h4> <h5>多终端共享,可视化观察每个请求</h5> </div> <div class="item"> <span class="iconWrapper"> <i class="iconfont"></i> </span> <h4>规则逻辑(Rule)</h4> <h5>个性化处理规则,定制专属调试工具</h5> </div> <div style="clear:both"></div> </div> </div> <div class="quickstart listSection"> <div class="quickstartContent listContent"> <h4 class="subtitle" id="install">安装</h4> <ul> <li>安装 <a href="http://nodejs.org/" target="_blank">Node.js</a> >= v0.12</li> <li><code class="simpleBash">npm install -g anyproxy</code>, 可能需要<code class="simpleBash">sudo</code></li> <li><a href="https://github.com/alibaba/anyproxy#quick-start" target="_blank">More>></a></li> </ul> <h4 class="subtitle" id="quickstart">使用</h4> <ul> <li>运行 <code class="simpleBash">anyproxy</code></li> <li>把浏览器http代理指向 127.0.0.1:8001</li> <li>访问界面:http://127.0.0.1:8002</li> <li><a href="https://github.com/alibaba/anyproxy#quick-start" target="_blank">更多用法 >></a></li> </ul> <a href="https://github.com/alibaba/anyproxy#step-4---launch-web-interface" target="_blank"><img class="screenshot" src="http://gtms01.alicdn.com/tps/i1/TB1IdgqGXXXXXa9apXXLExM2pXX-854-480.gif" width="350"/></a> </div> </div> <div class="sample"> <div class="sampleContent"> <h4 class="subtitle" id="sample ">规则文件(rule)样例</h4> <div class="item"> <h5 class="itemTitle">在HTML响应末尾加上"hello world"</h5> <pre> <code class="javascript"> //append "hello world" to all web pages //file : rule_replace_response_data.js //run : anyproxy --rule rule_replace_response_data.js module.exports = { replaceServerResDataAsync: function(req,res,serverRes,cb){ if(/html/i.test(res.headers['content-type'])){ var newDataStr = serverRes.toString(); newDataStr += "hello world!"; cb(newDataStr); } } }; </code> </pre> <span class="figure"> <img src="https://t.alipayobjects.com/images/rmsweb/T1LcphXf0eXXXXXXXX.png" width="350"/> </span> <hr /> </div> <div class="item"> <h5 class="itemTitle">去除请求头的if-modified-since字段</h5> <pre> <code class="javascript"> //remove cache related header //file : rule_remove_cache_header.js //run : anyproxy --rule rule_remove_cache_header.js module.exports = { replaceRequestOption : function(req,option){ var newOption = option; delete newOption.headers['if-modified-since']; return newOption; } }; </code> </pre> <span class="figure"> <img src="https://t.alipayobjects.com/images/rmsweb/T1ecFhXjxcXXXXXXXX.png" width="350"/> </span> <hr /> </div> <div class="item"> <h5 class="itemTitle">为某个请求指定目标IP地址</h5> <pre> <code class="javascript"> //assign a specific IP adress for some request //file : rule_reverse_proxy.js //run : anyproxy --rule anyproxy --rule rule_reverse_proxy.js module.exports = { replaceRequestOption : function(req,option){ var newOption = option; if(newOption.headers.host == "www.taobao.com"){ newOption.hostname = "192.168.1.3"; newOption.port = "80"; } return newOption; } }; </code> </pre> <span class="figure"> <img src="https://t.alipayobjects.com/images/rmsweb/T1hsxhXeddXXXXXXXX.png" width="350"/> </span> <hr /> </div> <div class="item"> <h5 class="itemTitle">把所有图片响应替换成本地图片</h5> <pre> <code class="javascript"> //replace all the images with local one //file : rule_use_local_data.js //run : anyproxy --rule anyproxy --rule rule_use_local_data.js var fs = require("fs"), img = fs.readFileSync("sample.jpg"); module.exports = { shouldUseLocalResponse : function(req,reqBody){ if(/\.(png|gif|jpg|jpeg)$/.test(req.url)){ req.replaceLocalFile = true; return true; }else{ return false; } }, dealLocalResponse : function(req,reqBody,callback){ if(req.replaceLocalFile){ callback(200, {"content-type":"image/png"},img ); } } }; </code> </pre> <span class="figure"> <img src="https://t.alipayobjects.com/images/rmsweb/T1Zr4hXeXhXXXXXXXX.png" width="350"/> </span> </div> <div class="readmoreBtn"> <a href="https://github.com/alibaba/anyproxy/wiki/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%96%B0%E8%BD%AE%E5%AD%90%EF%BC%9Aanyproxy#%E5%BC%80%E6%94%BE%E5%BC%8F%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E8%AE%A1" target="_blank">>> 阅读:规则文件(Rule)API</a> </div> </div> </div> <div class="readMore listSection"> <div class="listContent"> <h4 class="subtitle" id="otherfeature">其他特性</h4> <ul> <li>Map Local,Log Filter等常规功能</li> <li><a href="https://github.com/alibaba/anyproxy#throttling">低网速网速模拟</a>,调试应用在2G/3G下的表现</li> <li><a href="https://github.com/alibaba/anyproxy#work-as-a-module-for-nodejs" target="_blank">把AnyProxy作为npm模块</a>,基于它做二次开发</li> </ul> <h4 class="subtitle" id="ref">相关阅读</h4> <ul> <li><a href="https://github.com/alibaba/anyproxy/wiki/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%96%B0%E8%BD%AE%E5%AD%90%EF%BC%9Aanyproxy" target="_blank">代理服务器的新轮子</a>,介绍AnyProxy的设计初衷,以及它的开放式设计可以解决什么问题。</li> <li><a href="http://www.infoq.com/cn/presentations/alipay-hybrid-application-quality-assurance-practice" target="_blank">QCon - 《支付宝hybrid应用质量保证实践》</a>,涉及到AnyProxy在测试工程中的应用(By 陈晔)</li> </ul> </div> </div> <div class="learnMore listSection"> <div class="btnWrapper"> <h4 class="subtitle white" id="readmore">Read More</h4> <a class="actionBtn actionBtnWhite" href="https://github.com/alibaba/anyproxy" target="_blank">https://github.com/alibaba/anyproxy</a> </div> </div> <div class="footer"></div> </div> <link rel="stylesheet" type="text/css" href="/dest/github.css" /> <script src="/dest/lib.js"></script> <script type="text/javascript"> Zepto(document).ready(function() { Zepto('.sample code').each(function(i, block) { hljs.highlightBlock(block); }); }); </script> </body> </html>