IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用于ajax跨域提交post或者get请求的代理程序

废墟 2011-11-14 23:41:09 累计浏览 2,804 次
本机暂存

局限性:1.服务器必须配置有cURL 2.增加一次服务器的请求代码如下:


/**
 * AJAX代理程序,用于跨域提交请求
 * 用于发送post或get请求
 * 只能被ajax请求所访问,直接访问将被忽略
 * 
 * @author 废墟 <r.anerg@gmail.com>
 * @link http://anerg.com
 */
ini_set("display_error"0
);
error_reporting(0
);
date_default_timezone_set('Asia/Shanghai'
);
define('BASEPATH'dirname(__FILE__
));

class 
ajaxproxy 
{

    public function 
__construct
() {
        
ob_start
();
        
header("Expires: -1"
);
        
header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0"FALSE
);
        
header("Pragma: no-cache"
);
        
header("Content-type: text/html; charset=utf-8"
);
        if (
get_magic_quotes_gpc
()) {
            
$in = array(& $_GET, & $_POST, & $_COOKIE, & $_REQUEST
);
            while (list(
$k$v) = each($in
)) {
                foreach (
$v as $key => $val
) {
                    if (!
is_array($val
)) {
                        
$in[$k][$key] = stripslashes($val
);
                        continue;
                    }
                    
$in[] = & $in[$k][$key
];
                }
            }
            unset(
$in
);
        }
    }

    public function 
run
() {
        if (
$_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'
) {
            
$request_url $this->build_url
();
            if (
$request_url !== FALSE
) {
                
$rs $this->_curl($request_url$_POST
);
                if (
$rs === FALSE
) {
                    
$this->log($request_url'AJAX_PROXY'
);
                    
$out = array('error' => -2000'msg' => '系统连接超时!'
);
                    echo 
json_encode($out
);
                } else {
                    echo 
$rs
;
                }
            }
        }
    }

    private function 
build_url
() {
        
$app trim($_GET['app'
]);
        
$act trim($_GET['act'
]);
        if (empty(
$app) || empty($act
)) {
            return 
FALSE
;
        } else {
            
$args $_GET
;
            unset(
$args['app'], $args['act'
]);
            
$uri ''
;
            if (!empty(
$args
)) {
                
$uri .= '?'
;
                foreach (
$args as $k => $v
) {
                    
$tmp[] = $k '=' $v
;
                }
                
$uri .= join('&'$tmp
);
            }
            
$request_url 'http://' $app '.xs8.cn/ajax/' $act $uri
;
            return 
$request_url
;
        }
    }

    private function 
_curl($url$post_data = array(), $second 5
) {
        
$ch curl_init
();
        
curl_setopt($chCURLOPT_URL$url
);
        
curl_setopt($chCURLOPT_HEADER0
);
        
curl_setopt($chCURLOPT_TIMEOUT$second
);
        
curl_setopt($chCURLOPT_COOKIE$_SERVER['HTTP_COOKIE'
]);
        if (!empty(
$post_data
)) {
            
curl_setopt($chCURLOPT_POST1
);
            
curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($post_data
));
        }
        
curl_setopt($chCURLOPT_RETURNTRANSFERtrue
);
        
$content curl_exec($ch
);
        
curl_close($ch
);
        return 
$content
;
    }

    private function 
log($log_data$log_file
) {
        
$data date("Y-m-d H:i:s") . " --> " trim($log_data) . "n"
;
        
$file dirname(BASEPATH) . '/application/logs/' $log_file '_' date("Y-m-d"
);
        
error_log($data3$file
);
    }

}

$obj = new ajaxproxy
();
$obj->run
();
?>

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用python/casperjs编写终极爬虫-客户端App的抓取 (累计阅读 12,961)
  2. YSLOW法则中,为什么yahoo推荐用GET代替POST? (累计阅读 11,837)
  3. Rolling cURL: PHP并发最佳实践 (累计阅读 11,486)
  4. JSONP与POST方式请求 (累计阅读 11,293)
  5. jQuery插件---轻量级的弹出窗口wBox. (累计阅读 10,772)
  6. curl 命令使用cookie (累计阅读 10,015)
  7. 让安卓手机通过代理翻墙的方法 (累计阅读 9,115)
  8. 10个强大的Ajax jQuery文件上传程序 (累计阅读 8,853)
  9. curl检查访问网页返回的状态码 (累计阅读 7,834)
  10. 你不知道的 HTTP (累计阅读 6,511)