【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地

【php】利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地

本文与《【Servlet】Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地》(点击打开链接)为姊妹篇,只是后端编程语言换成了php。

做出同样的效果,打开页面,得到客户端的ip,并获取利用新浪api接口获取此ip的归属地。

【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地

可以看到,在IE6也是相当正常的。

目录结构如下,非常简单,同样就两个文件,其实如果你愿意,写成一个php文件也可以,但是显示层和逻辑业务层还是不混在一起为好吧?

唯一值得注意的是,这两个文件打死也不能一个叫ipGet.php,ipGet.html,虽然后缀名是不同的,但前缀一定不能相同,

否则IE6不知为何无法应答这个Json

【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地

ipGetView.html与《【Servlet】Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地》(点击打开链接)中的显示层页面是完全相同,新浪api接口也是完全相同的,这里不再赘述。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Javaweb-IP查询</title>
</head>

<body>
	<p>IP:<span id="ip"></span></p>
	<p>IP归属地:<span id="area"></span></p>
</body>
</html>
<script>
	//创建Ajax对象,不同浏览器有不同的创建方法,其实本函数就是一个简单的new语句而已。  
	function createXMLHttpRequest() {
		var XMLHttpRequest1;
		if (window.XMLHttpRequest) {
			XMLHttpRequest1 = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			try {
				XMLHttpRequest1 = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				XMLHttpRequest1 = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		return XMLHttpRequest1;
	}
	function ajax() {		
		var XMLHttpRequest1 = createXMLHttpRequest();
		//指明相应页面  
		var url = "ipGetDo.php";
		XMLHttpRequest1.open("POST", url, true);
		//这里没法解释,你所有JavaScript的请求头都这样写就对了,不会乱码  
		XMLHttpRequest1.setRequestHeader("Content-Type",
				"application/x-www-form-urlencoded");
		XMLHttpRequest1.send(null);
		//对于返回结果怎么处理的问题		
		XMLHttpRequest1.onreadystatechange = function() {
			//这个4代表已经发送完毕之后  
			if (XMLHttpRequest1.readyState == 4) {
				//200代表正确收到了返回结果  
				if (XMLHttpRequest1.status == 200) {
					//json返回结果
					var data=eval("("+XMLHttpRequest1.responseText+")");
					document.getElementById("ip").innerHTML=data.ip;
					document.getElementById("area").innerHTML=decodeURIComponent(data.area1)+decodeURIComponent(data.area2);
				} else {
					//如果不能正常接受结果,你肯定是断网,或者我的服务器关掉了。  
					alert("网络连接中断!");
				}
			}
		};
	}
	ajax();
</script>
之后,ipGetDo.php中,如同《【php】登录系统与输出浏览者信息》(点击打开链接)一样,利用${_SERVER['REMOTE_ADDR']}先获取用户的ip,然后通过curl向远程获取数据。php用curl向远程获取数据的格式如下:

<?php  
$url = "需要获取数据的url"; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); 
$DistanceContent = curl_exec($ch); 
echo $DistanceContent; //$DistanceContent为获取到的数据
?> 

因此ipGetDo.php的代码也就如下,获取到数据,直接打印出来,让ipGetView.html用Ajax获取即可。

<?php  
$url = "http://ipapi.sinaapp.com/api.php?f=json&ip=${_SERVER['REMOTE_ADDR']}"; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); 
$DistanceContent = curl_exec($ch); 
echo $DistanceContent; 
?>