12
3

利用PHP实现AJAX跨域HTTP GET

AJAX要实现跨域HTTP GET/POST本身就是很麻烦的,具体方法就不详细说了.

我是比较懒的人,只要实现功能就好,我平时最常用的是用PHP的file_get_contents,把远程的HTTP直接get到本地的php,这样就不存在跨域的问题了.不过这个方法就不是很全面的,一方面速度比较慢,中转了一次.另一方面file_get_contents只支持标准的HTTP.最近我就遇到一个情况了,对方是用ipworks写的一个简单80端口的输出.没有完整的HTTP HEADER.用file_get_contents就一直报错.后来改用curl就正常了,还是curl功能强大点.当然我这个方法只能用作简单的HTTP GET.

ajax.php代码节选

1
2
3
4
5
6
7
8
9
10
11
12
13
if($_GET['action'] == "geturl"){
	$url = trim($_GET['url']);
	//$content = file_get_contents($url,"r");
	$ch = curl_init();
	$timeout = 5;
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$content = curl_exec($ch);
	curl_close($ch);
	echo $content;
	exit;
}

js部分代码,当然是用jquery的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function ajaxopen(url){
	$.ajax({
		url: 'cam.php?action=geturl&url='+url,//通过php获取远程信息,解决ajax跨域问题
		cache: false,
		type:"get",
		async:false,
		success: function(str){
			//alert('成功了:'+str);
		},
		error: function(str){
			alert('读取错误');
		}
	});
}

另外前些天看到张宴有出了一个小作品:
AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求

简单来说就是用flash来做中转,不过对方服务器需要有crossdomain.xml. 可以POST大量数据,也是不错的解决方案.速度也应该比file_get_contents快.

相关日志

4 条评论了已经

Trackbacks/Pingbacks.

发表评论

名字(必须)
邮箱(必须),(永不被公布)
网址(建议)

字体为 粗体 是必填项目,邮箱地址 永远不会 公布。

允许部分 HTML 代码:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs(网站链接)必须完整有效 (比如: http://www.vpnall.com),所有标签都必须完整的关闭。

超出部分系统将会自动分段及换行。

请保证评论内容是与日志或 Blog 内容相关的,灌水、攻击性或不恰当的评论 可能 会被编辑或删除。