通过淘宝接口免费获取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 ...
随机推荐
- Swift - 用UIScrollView实现视差动画效果
Swift - 用UIScrollView实现视差动画效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoVi ...
- curl win
curl -H "tocken: 123456789" -H "userName: admin" http://39.18.10.2/log/v1/err ...
- Toast的用法(可以设置显示时间,自定义布局的,线程中的Toast)
自定义的Toast类 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- Orchard 前台权限与自定义权限
一:关于前台权限 1:只允许自己看到 首先,我们需要确定在 Role 设置页面,用户所对应的 View Page by others 和 View all content 未被选中.备注,我们首先和得 ...
- SVG渲染顺序及z轴显示问题(zIndex)
SVG是严格按照定义元素的顺序来渲染的,这个与HTML靠z-index值来控制分层不一样. 在SVG中,写在前面的元素先被渲染,写在后面的元素后被渲染.后渲染的元素会覆盖前面的元素,虽然有时候受透明度 ...
- linux中的通配符、元字符、转义符
linux中的通配符.元字符.转义符 linux中的通配符元字符转义符 shell命令的构成 通配符 元字符meta 转义符 example reference shell命令的构成 每条linux命 ...
- http://download.csdn.net/detail/yanzi1225627/6548337
[2013.9.8网络首发]导入Android4.2源码里的Gallery2和Camera模块至Eclipse全过程 上次导入的时候是新建的一个user library,然后把所需要的四个库文件放里面 ...
- 面试题-Redis、MongoDB、Memcached[转]
https://blog.csdn.net/gangsijay888/article/details/81213811 一.缓存 搞懂缓存那些事:https://blog.csdn.net/a7248 ...
- Cesium中导入三维模型方法(dae到glft/bgltf) 【转】
http://blog.csdn.net/l491453302/article/details/46766909 目录(?)[+] Cesium中目前支持gltf和bgltf两种格式.“gltf是kh ...
- 【Scala】Scala-case-参考资料
Scala-case-参考资料 scala case_百度搜索 Scala School - 基础知识(续) scala case匹配值 - CSDN博客 scala入门教程:scala中的match ...