preloader image
通过淘宝接口免费获取IP地址信息

通过淘宝接口免费获取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 doGet(String url, Map params, Class clazz) {

return JSON.parseObject(doGet(url, params), clazz);

}

public static T doPost(String url, Map params, Class clazz) {

return JSON.parseObject(doPost(url, params), clazz);

}

public static T postJson(String url, Map params, Class clazz) {

return JSON.parseObject(postJson(url, params), clazz);

}

public static String postJson(String url, Map 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 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 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 params) {

UrlEncodedFormEntity entity = null;

try {

entity = new UrlEncodedFormEntity(getNameValuePair(params), DEFAULT_CHARSET);

} catch (UnsupportedEncodingException e) {

}

return entity;

}

private static List getNameValuePair(Map params){

List list = new ArrayList();

if (null != params && !params.isEmpty()) {

for (Entry 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

Copyright © 2088 下一次世界杯_世界杯巴 - xbpifu.com All Rights Reserved.
友情链接