不自重者,取辱。不自长者,取祸。不自满者,受益。不自足者,博闻。

之前做Web项目的时候,经常会使用Fiddler(Windows下)、Charles Proxy(Mac下)来抓包,调试一些东西;现在搞Android App开发,有时候也需要分析手机App的网络请求,包括参数、返回值等。在Mac上也是可以继续使用Charles Proxy来抓Android App发出的网络包的,大概的几个步骤:

1、保证手机和Mac连接的是同一个无线局域网

2、在Mac上打开Charles Proxy,菜单栏操作:Proxy→Proxy Setting,检查端口,一般保持默认,HTTP Proxy端口为8888

3、查看Mac当前的IP地址,之后作为手机的Proxy IP用:

前一篇文章有写到form表单+iframe的方式,需要处理跨域的问题,里面用到一个代理文件,例子中给的非常简单,这里补上一个功能比较完善的前端代理文件,能兼容多种参数,多种回调。


前端代理文件:http://www.baidufe.com/proxy

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>Proxy Page</title>
    <script type="text/javascript">
    (function(){
        if(top !== self){
            var s = (location.hash || location.search).substr(1).split('&'), //提取参数
                fun = '', // 回调方法 
                isParentScope = false, g, scope, //范围:parent or top
                reg = /[^\w\.]/g,  // 回调方法正则
                args = {},isArgsJson = true,
                domain = "baidufe.com"; // 参数
    
            for(var i=0,l=s.length,item;i<l;i++){
                item = (s[i] || '').split('=');
                if(item[0] === 'fun'){  // 回调方法
                    fun = item[1].replace(reg, '');
                }else if(item[0] === 'parent' && item[1]){ // 标记范围
                    isParentScope = true;
                }else if(item[0] === 'domain' && item[1]){ // 标记范围
                    domain = item[1];
                }else if(item[0] === 'arg'){    // 聚合参数
                    if(isArgsJson) {
                        isArgsJson = false;
                        args = [];
                    }
                    args.push(item[1]);
                }else{  // 参数聚合
                    args[item[0].replace(reg, '')]=(item[1] || '').replace(/[><\'\"\{\}]/g, '');
                }
            }
    
            // 设置scope
            var _setScope = function(isParentScope) {
                if(isParentScope) {
                    scope = g = parent;
                }else{
                    scope = g = top;
                }
            };
    
            // domain校验、设定
            try{
                _setScope(isParentScope);
                // 这一步用来校验是否存在跨域问题
                scope.document;
            }catch(ex){
                // 跨域了,就需要设置domain了
                document.domain = domain ;
                _setScope(isParentScope);
            }
    
            try{
                fun = fun.split('.');
                if(fun[0] === 'window' 
                    || fun[0] === 'document' 
                    || fun[0] === 'location' 
                    || fun[0] === 'alert'
                    || fun[0].indexOf('.alert') > -1){
                }else{
                    // 回调方法拼接
                    for(var i=0,l=fun.length;i<l;i++){
                        if(i<l-1){
                            scope = scope[fun[i]];
                        }
                        g = g[fun[i]];
                    }
    
                    // 方法回调
                    if(isArgsJson){
                        g.call(scope,args);
                    }else{
                        g.apply(scope,args);
                    }
                }
            }catch(e){}
        }
    })();
    </script>
</head>
<body>
        
</body>
</html>
#web前端 #跨域 #proxy 浏览(782) 阅读全文 评论