博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过淘宝接口免费获取IP地址信息
阅读量:5314 次
发布时间:2019-06-14

本文共 6167 字,大约阅读时间需要 20 分钟。

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://www.cnblogs.com/lr393993507/p/9577342.html

你可能感兴趣的文章
对于C语言中数组名是指针的理解
查看>>
实验八 接口与实现接口的类
查看>>
mac OSx 安装 mysqlclient
查看>>
Scala for the Impatients---(10)Traits
查看>>
简单的姓名号码查询系统
查看>>
PostgreSQL 保留关键字添加方法之一,不带参数的函数
查看>>
你的博客可能被爬了
查看>>
赛前热手 (天梯赛暴力题)
查看>>
.net 冒泡排序示例
查看>>
Uva(10330)
查看>>
vlan学习
查看>>
R-Sys.time计算程序运行时间
查看>>
Java类模板
查看>>
【转贴】SAP HANA内存数据库详解
查看>>
二分查找BinarySearch(Java)
查看>>
两种应该掌握的排序方法--------1.shell Sort
查看>>
vuejs动态组件给子组件传递数据
查看>>
javascript constrator and prototype
查看>>
杭电2065(递推)红色病毒
查看>>
No Language-Support in system setting ,Ubuntu
查看>>