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

本文与《【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;
?> 
时间: 2024-12-18 17:38:10

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

【Servlet】Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地

这里之所以调用新浪api接口,主要是可以避免我们在本地存放一个ip归属地库, 同时,我们在本地要存放用户的ip,仅仅存放其ip就可以了,无须存放其归属地,节省一个字段. 如下图,写一个带有获取客户端IP地址的网页: 首先,在Eclipse的目录结构如下: 里面除了servlet的支持包之外,就一个.jsp与一个.java. 其中这里用到Servlet3.0,因此web.xml没有任何东西: <?xml version="1.0" encoding="UTF-8"

Python如何调用新浪api接口的问题

前言:这些天在研究如何调用新浪开放平台的api分析新浪微博用户的数据 成果:成功调用了新浪api获取了用户的一些个人信息和无数条公共微博 不足:新浪开放平台访问有限制,返回的数据着实有限,不足以分析问题,真的要分析问题还是得个人写爬虫 下面是调用新浪开放api的过程: 第一步:按这个做就行 http://www.cnblogs.com/dhsunny/p/3578399.html?utm_source=tuicool&utm_medium=referral 其中有一不那个新浪api测试工具是打不

php利用新浪接口查询ip获取地理位置示例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php function getIPLoc_sina($queryIP){   $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;   $ch = curl_init($url);    curl_setopt($ch,CURLOPT_ENCODING ,'utf8');

【转载】利用新浪博客建设网站外链

当今网络管理机制越来越完善,允许发外接的网站越来越少,建设网站外链变得越来越困难,今天和大家分享一篇文章,告诉你如何利用新浪博客建设网站外键. 目前国内知名的博客平台有QQ.网易.新浪.搜狐.百度等,先来分析一下为什么我为什么选择新浪博客建设网站外链? 腾讯博客(QQ空间)是不被搜索引擎收录的,所以直接淘汰. 网易博客使用的是三级域名,即使成功建设外链权重也不高. 百度博客(百度HI)即将要关闭了,完全是浪费时间. 搜狐博客也是使用三级域名,权重并不高. 新浪博客的内容页使用 blog.sina

淘宝(新浪)API获取IP地址位置信息

1 package com.parse; 2 3 import java.io.BufferedReader; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.UnsupportedEncodingException; 8 import java.net.HttpURLConnection; 9 import

【API】新浪天气接口 Beta

新浪天氣接口那是公認的好,可是百度之後發現很簡陋,所以自己寫了工具類,此處幫忙測試下其中的天氣接口,看有哪些地方要改進的. Jar 名称:          NonentityUtil Class 名称:       SinaWeatherUtil,新浪天氣 Util 類 方法名:            getWeatherByCity(String city,int forecastDays),根據城市獲取天氣 輸入參數:         city,城市,拼音或者漢語([BUG]輸入拼音返回的

t.cn短网址怎么生成?利用新浪短链接转化器生成永久短网址的几种方法

不管是在短信中,还是社交软件中(如微信.QQ等),经常能看到开头为t.cn格式的链接出现,其实这是新浪微博提供的短网址服务,下面详谈t.cn短链接的前世今生,并附上几种短网址制作方法. 1.新浪短网址的来历 t.cn新浪短网址,格式为http://t.cn/xxxxx ,是新浪微博与2011年3月23日启用t是新浪微博与2011年3月23日启用t.cn作为微博内容中的网址链接跳转的缩短服务,不再使用原来的短链接域名sinaurl.cn. 新的短网址域名比原来的sinaurl.cn缩短6个字符,这

利用fitnesse实现api接口自动化测试

上午在园子里乱逛,看了不少小伙伴们分享的接口测试方面的知识,仔细想想,我做接口测试也有几个年头了,大家所叙述到的一些经验或多或少,我也曾遇到过,突然意识到知识的点滴积累是多么的重要,我记得我最早接触接口测试的时候,就是只在浏览器里人工测试单个接口的返回结果,后来用python的unittest自己写测试框架,和现在大多数小伙伴们的方法差不多,测试用例也是存放在excle表中,这对于单人测试来说都还ok,但是如果是多人协同测试时,问题就出来了,因为按目录存放在不同的excle表中的测试用例,维护起

使用新浪API生成短连接

公司最近需要进行短信推广,需要发送大批量带有连接地址的短信给用户,并且需要统计短信的点击量.因为需要考虑短信成本问题,需要将长连接地址生成比较短的连接.因为公司本身没有短的一级域名,所以考虑到使用第三方的短连接生成器.经过对比选择了新浪短连接生成器. 新浪接口文档地址: http://open.weibo.com/wiki/Short_url/shorten 新浪提供了xml和json两种格式进行生成短连接,这里使用的是json. 下面是请求的代码 public class ShortUrlHe