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

来源:互联网 发布:端游 页游区别 知乎 编辑:程序博客网 时间:2024/05/29 01:54

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

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


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

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

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

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


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; ?> 

0 0
原创粉丝点击