用于ajax跨域提交post或者get请求的代理程序
局限性: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($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch, CURLOPT_COOKIE, $_SERVER['HTTP_COOKIE']);
if (!empty($post_data)) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$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($data, 3, $file);
}
}
$obj = new ajaxproxy();
$obj->run();
?>
建议继续学习:
- 优雅绝妙的Javascript跨域问题解决方案 (阅读:6744)
- jQuery中getJSON跨域原理详解 (阅读:5621)
- 跨域请求的iframe解决方案(1) (阅读:5392)
- ajax-cross-domain (阅读:4988)
- 利用跨域资源共享(CORS)实现ajax跨域调用 (阅读:4149)
- 研究ext发现ajax跨域实现 (阅读:3743)
- 三谈Iframe自适应高度 (阅读:3639)
- 使用window.postMessage实现跨域通信 (阅读:3399)
- 使用document.domain和iframe实现站内AJAX跨域 (阅读:3314)
- 跨域请求的iframe解决方案(2) (阅读:3146)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:废墟 <a@anerg.cn> 来源: 废墟
- 标签: 跨域
- 发布时间:2011-11-14 23:41:09
- [54] android 开发入门
- [53] IOS安全–浅谈关于IOS加固的几种方法
- [51] Oracle MTS模式下 进程地址与会话信
- [51] 图书馆的世界纪录
- [50] 如何拿下简短的域名
- [50] Go Reflect 性能
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [31] 视觉调整-设计师 vs. 逻辑