通过淘宝接口免费获取IP地址信息
1.获取互联网访问IP信息
一般获取互联网访问的IP的相关信息一般都是收费接口,免费的接口不多,我使用到一个接口如下:
http://ip.taobao.com/service/getIpInfo.php?ip=139.189.109.174
这个是淘宝的接口,直接可以查询对应的IP信息,免费使用哦。在Java程序里可以直接封装调用。
对封装获取IP的地址的方法代码如下:
HttpRequestUtils.java
package com.seezoon.framework.common.http; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import org.springframework.util.StopWatch; import com.alibaba.fastjson.JSON;
import com.seezoon.framework.common.context.exception.ServiceException; /**
* 对性能和参数要求敏感,需要自行利用 HttpPoolClient 对象自行构造
*
* @author hdf 2018年4月23日
*/
public class HttpRequestUtils { /**
* 日志对象
*/
private static Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class); private static String DEFAULT_CHARSET = "UTF-8"; private static HttpPoolClient defaultHttpPoolClient = new HttpPoolClient(); public static <T> T doGet(String url, Map<String, String> params, Class<T> clazz) {
return JSON.parseObject(doGet(url, params), clazz);
} public static <T> T doPost(String url, Map<String, String> params, Class<T> clazz) {
return JSON.parseObject(doPost(url, params), clazz);
} public static <T> T postJson(String url, Map<String, String> params, Class<T> clazz) {
return JSON.parseObject(postJson(url, params), clazz);
} public static String postJson(String url, Map<String, String> params) {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(JSON.toJSONString(params), ContentType.APPLICATION_JSON));
return execute(httpPost);
} public static String postXml(String url,String content) {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(content, ContentType.create("application/xml", "UTF-8")));
return execute(httpPost);
}
public static String doGet(String url, Map<String, String> params) {
Assert.hasLength(url, "请求地址为空");
try {
URIBuilder builder = new URIBuilder(url);
builder.setParameters(getNameValuePair(params));
HttpGet httpGet = new HttpGet(builder.toString());
String result = execute(httpGet);
return result;
} catch (Exception e) {
throw new ServiceException(e);
}
} public static String doPost(String url, Map<String, String> params) {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(getUrlEncodedFormEntity(params));
return execute(httpPost);
} public static String execute(HttpRequestBase request) {
StopWatch watch = new StopWatch();
watch.start();
CloseableHttpResponse response = null;
try {
response = defaultHttpPoolClient.execute(request);
watch.stop();
String requestURI = request.getURI().toString();
logger.debug("http client:{} comleted use {} ms",requestURI,watch.getTotalTimeMillis());
int status = response.getStatusLine().getStatusCode();
if (HttpStatus.SC_OK == status) {// 成功
HttpEntity entity = response.getEntity();
if (null != entity) {
String result = EntityUtils.toString(entity, DEFAULT_CHARSET);
EntityUtils.consume(entity);
return result;
} else {
throw new ServiceException("请求无数据返回");
}
} else {
throw new ServiceException("请求状态异常失败");
}
} catch (Exception e) {
throw new ServiceException(request.getURI().toString() + "请求失败", e);
} finally {
if (null != response) {
try {
response.close();
} catch (IOException e) {
logger.error("CloseableHttpResponse close error", e);
}
}
}
} private static UrlEncodedFormEntity getUrlEncodedFormEntity(Map<String, String> params) {
UrlEncodedFormEntity entity = null;
try {
entity = new UrlEncodedFormEntity(getNameValuePair(params), DEFAULT_CHARSET);
} catch (UnsupportedEncodingException e) {
}
return entity;
} private static List<NameValuePair> getNameValuePair(Map<String, String> params){
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (null != params && !params.isEmpty()) {
for (Entry<String, String> entry : params.entrySet()) {
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
return list;
} public static void shutDown() {
defaultHttpPoolClient.shutdown();
}
}
ServiceException.java
package com.seezoon.framework.common.context.exception; /**
* 自定义异常方便后续扩展
*
* @author hdf 2018年4月20日
*/
public class ServiceException extends RuntimeException { public ServiceException() {
super();
// TODO Auto-generated constructor stub
} public ServiceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
} public ServiceException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
} public ServiceException(String message) {
super(message);
// TODO Auto-generated constructor stub
} public ServiceException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
} }
调用使用方法如下:
if (StringUtils.isNotEmpty(ip)) {
String ipInfo = HttpRequestUtils.doGet("http://ip.taobao.com/service/getIpInfo.php", Maps.newHashMap("ip",ip));
if (StringUtils.isNotEmpty(ipInfo)) {
JSONObject parseObject = JSON.parseObject(ipInfo);
if (parseObject.containsKey("data")) {
JSONObject data = parseObject.getJSONObject("data");
System.out.println(data.getString("region") + data.getString("city"));
}
}
}
更详细的写在了CSDN上:https://blog.csdn.net/lr393993507/article/details/82345614
通过淘宝接口免费获取IP地址信息的更多相关文章
- C#根据淘宝接口网址获取客户端访问IP和网络运营商
网络运营商会为每台联网的电脑分配公网IP,如何获取它们?? 话不多说直接上代码: using System; using System.Collections.Generic; using Syste ...
- 淘宝接口实现ip归属地查询
<?php header('content-type:text/html;charset=utf-8'); /*获取当前ip归属地 调用淘宝接口 */ function get_ip_place ...
- [Xcode 实际操作]八、网络与多线程-(11)使用同步Post方式查询IP地址信息
目录:[Swift]Xcode实际操作 本文将演示如何通过Post请求,同步获取IP地址信息. 一旦发送同步请求,程序将停止用户交互,直至服务器返回数据. 在项目导航区,打开视图控制器的代码文件[Vi ...
- [Xcode 实际操作]八、网络与多线程-(12)使用异步Post方式查询IP地址信息
目录:[Swift]Xcode实际操作 本文将演示如何通过Post请求,异步获取IP地址信息. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开视图控制器的代码 ...
- PHP通过访问第三方接口,根据IP地址获取所在城市
<?php header('Content-Type:text/html;Charset=utf-8'); /** * 获取IP地址 * * @return string */ function ...
- php获取ip地址所在的地理位置的实现
1,通过腾讯或者新浪提供的接口来获取(新浪和腾讯类似) <?php function getIPLocation($queryIP){ $url = 'http://ip.qq ...
- 获取IP地址的几种方法
根据ip获取地址的几种方法 1.调用新浪IP地址库 <script type="text/javascript" src="js/jquery.js"&g ...
- 淘宝接口 TopAPi
演示一下调用淘宝的接口,让大家心里有个数, 很简单,新建一个工程,拖一个IDHttp,Button和Memo到窗体上去 然后在这个Button的OnClick事件中写入如下代码: [delphi] v ...
- PHP学习笔记13淘宝接口开发一例(tmall.items.discount.search),PHP
程序设计,因为接口是有请求次数限制的,正式接口也只有2W次每天的请求次数,所以我们需要把从接口返回的数据缓存起来. 采用的接口是http://api.taobao.com/apidoc/api.htm ...
随机推荐
- 关于面试总结11-selenium面试题
前言 面试web自动化必然会问到selenium,问selenium相关的问题定位是最基本的,也是自动化的根本,所以面试离不开元素定位问题. 之前看到招聘要求里面说"只会复制粘贴xpath的 ...
- SVN更新的问题
更新的时候一直遇到"Base checksum mismatch on"或者"Checksum mismatch while updating",其它文件可以提 ...
- 国家code和区号计算
因为项目中要用到这个功能.实现类似微信注冊时能够选择国家并得到对应的区号.还要推断号码正确与否的正则. 找到了 libPhoneNumber-iOS 标准化电话号码库 https://github.c ...
- 通知栏消息(Notification)初步
Notification是用来在通知中心中显示信息的,这里讲解了其最简单的使用方式. 关于PendingIntent和Intent的区别可以参考这篇文章:http://blog.csdn.net ...
- [Hook] 跨进程 Binder 学习指南
cp from : http://weishu.me/2016/01/12/binder-index-for-newer/ 毫不夸张地说,Binder是Android系统中最重要的特性之一:正如其名“ ...
- python 多线程日志切割+日志分析
python 多线程日志切割+日志分析 05/27. 2014 楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来 ...
- FreeMarker:Java模板引擎
本资源由 伯乐在线 - 黄余粮 整理 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTML Web页面,特别是基于M ...
- VMware vSphere中的HA工作原理介绍
http://blog.51cto.com/linkinsds/416738 HA全称High Availability.它是VMware的企业应用环境中用来保障企业级应用的不间断运行需求所产生的一个 ...
- 【BZOJ】【3931】【CQOI2015】网络吞吐量
最短路+最大流 思维难度并不高,其实题面几乎已经把算法讲完了…… 练习模板的好题= = 哦对了,求最短路和最大流的时候都得开long long……QwQ /********************** ...
- ASP.NET Razor 简介
ylbtech-.NET: ASP.NET Razor 简介 Razor 不是一种编程语言.它是服务器端的标记语言. 1. 什么是 Razor?返回顶部 Razor 是一种标记语法,可以让您将基于服务 ...