zoukankan      html  css  js  c++  java
  • 通过淘宝接口免费获取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

  • 相关阅读:
    生成全局id的方式
    如何使得搜索的信息更准确?
    水平分区
    大表如何优化?
    MySQL_fetch_array和MySQL_fetch_object的区别是什么?
    BLOB和TEXT区别
    如何在Unix和MySQL时间戳之间进行转换?
    用ActionSupport实现验证
    服务器端验证--验证框架验证required.
    自定义类型转换器converter
  • 原文地址:https://www.cnblogs.com/lr393993507/p/9577342.html
Copyright © 2011-2022 走看看