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地址信息相关推荐

  1. 调用淘宝接口有每IP数量/时间限制-负载均衡解决

    其实标题不太准确,不过原理是一样. 这里要解决的问题是:调用淘宝接口有每IP数量/时间限制,但是我们的调用量较大,有可能超过这个限制,从而导致可能被淘宝屏蔽一小段时间.为了解决这个问题,我们需要用多个 ...

  2. 获取IP地址信息的API合集

    今天给大家分享一些获取IP地址信息的API合集 一.ip.cn查询网获取当前客户端IP 二.ip查询网获取当前客户端IP 三.百度获取IP地址信息 四.本站获取当前客户端IP信息 五.其他平台获取IP ...

  3. 从淘宝服务器IP地址服务获取IP地址信息的方法

    主要是json返回值的获取 package com.xtisp.service.system; import java.io.BufferedReader; import java.io.ByteAr ...

  4. java ip地址接口_java获取ip地址与网络接口的方法示例

    java.net包 大家应该都知道,网络相关对象在java.net包中,Java net包下的类如下: 1.获取主机对象InetAddress //获取本地主机对象 InetAddress host ...

  5. java ip地址查询接口_java获取ip地址与网络接口的方法示例

    java获取ip地址与网络接口的方法示例 发布时间:2020-09-20 23:57:52 来源:脚本之家 阅读:66 作者:骏马金龙 java.net包 大家应该都知道,网络相关对象在java.ne ...

  6. 淘宝,天猫获取sku详细信息 API

    item_sku-获取sku详细信息  前往注册开通测试接口 onebound.taobao.item_sku 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式 ...

  7. LWIP Socket UDP接收数据无法获取IP地址信息

    项目场景: STM32H743平台FreeRTOS下使用LWIP,在使用socket接口操作udp: 问题描述 接收UDP数据时不能获取远端IP和端口号 struct sockaddr_in sera ...

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

    本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地>(点击打开链接)为姊妹篇,只是后端编程语言换成了php. 做出同样的效果,打开页面,得 ...

  9. php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...

    [php]利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地 本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地 ...

最新文章

  1. RocketMQ:消息ACK机制源码解析
  2. PAT甲级题目翻译+答案 AcWing(进位制)
  3. 值得收藏!268条PCB layout设计规范
  4. python 基本数据类型常用方法总结
  5. Xamarin效果第一篇之时间轴
  6. Linq to Oracle 使用教程(七)将数据库的存储过程映射到方法
  7. 单片机两个正玄波信号的相位差计算_51单片机的定时器/计数器的原理与使用
  8. 《微服务》九大特性重读笔记
  9. linux学习笔记(三):文件系统结构
  10. 【系统】lsof 命令简介
  11. 13. 在O(1)时间删除链表节点(C++版本)
  12. H265H264视频流播放
  13. 大数据导入Excel
  14. kafka及可视化工具offset explorer
  15. 图画日记怎么画_画画提高的一个方法: 绘画日记!
  16. linux配置基于pptp的多用户多出口ip的vpn,PPTP配置多ip出口vpn
  17. 百度快照劫持代码的更新
  18. python高清图片合成_Python用PIL合成图片
  19. Learn English with M / 学习英语的十句经典名言
  20. DM8在银河麒麟服务器上配置Oracle19c的DBLINK服务

热门文章

  1. 需要使用电话外呼系统的行业都有哪些?好处何在?
  2. 超级账本源码分析(一) - 超级账本学习计划
  3. LeetCode 649. Dota2 参议院 | Python
  4. 小程序上的防疫保卫战 | 钛媒体深度
  5. c语言解决统计及格人数
  6. 对象的调用和构造函数
  7. 2015年01月02日
  8. 低频工业读写器|读卡器|阅读器CK-LR03-A01与FX1N三菱PLC联机应用手册
  9. buuctf-Had a bad day(文件包含)
  10. 痛批新一代IT“伸手党”