前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用IP在淘宝IP地址库库换地址 & json 解析应用

用IP在淘宝IP地址库库换地址 & json 解析应用

作者头像
收心
发布2022-01-14 09:36:04
2.5K0
发布2022-01-14 09:36:04
举报
文章被收录于专栏:Java实战博客

首先:我需要做一个玩家省份统计的需求,我只有他们的IP 如果然我一个个去百度搜IP,然后一个个输入,简直太要命,所以,我做了一个用Java 代替人力 用IP去换物理地址 地址:https://ip.taobao.com/ipSearch

思路:我在访问淘宝IP地址库的时候发现了 每次搜索 都会发送一个Http协议的Post的请求,并发现了 这是一个Json响应的结果。

我就想:利用Java代码 模拟Restful风格的接口 不也能做到同样的效果么,当然,这里的模拟是指 模拟 人 手动发送请求。

首先,要找到Http的请求工具,我想了一下Hutool库中有此工具,Maven如下

代码语言:javascript
复制
        <!-- Hutool工具 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.5.6</version> <!-- 版本会更新 想用最新的版本在:https://www.hutool.cn/docs/#/ -->
        </dependency>

然后发送了请求,我得需要处理 Json 吧,那就使用传说中的 AlibabaFastJson 吧,当然也可以用我的Jsop来处理。

代码语言:javascript
复制
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.74</version>
        </dependency>

既然 得了此 两员(FastJson、Hutool的HttpUtil)大将,那就开始盘它。

这里,再次强调一下思路

利用Hutool的HttpUtil,发送Post请求,得到一个String(就是请求结果), 用这个String经过第一次FastJson处理后封装到Map集合。

(获取的集合内容是我们浏览器看到的Json)

我们需要的数据在data里面,所以,要拿出来data数据,作为String,在经过FastJson处理一下,得到的Map集合,都到了我们Java范围内,我们就可以随便控制输出了。

代码如下

代码语言:javascript
复制
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.Map;

public class PostTaobaoGetPos {

    public static void main(String[] args) {
        HashMap<String, Object> paramMap = new HashMap<>();
        // 填写自己的想要查询的IP
        paramMap.put("ip", "49.85.228.158");
        paramMap.put("accessKey", "alibaba-inc");
        String result1 = HttpUtil.post("http://ip.taobao.com/outGetIpInfo", paramMap);
        // 处理数据
        Map jsonmap = (Map)JSON.parse(result1);
        Map<String,String> datamap = (Map)JSON.parse(jsonmap.get("data").toString());
        // 输出
        System.out.println("判断下请求是否拿到数据了 (如果是0,那么完蛋,啥也没拿到):"+datamap.size());
        System.out.println();
        System.out.println("ip is:"+datamap.get("queryIp"));
        System.out.println("国家 is:"+datamap.get("country"));
        System.out.println("省份 is:"+datamap.get("region"));
        System.out.println("市 is:"+datamap.get("city"));
        System.out.println("运营商 is:"+datamap.get("isp"));

    }
}

完结!

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这里,再次强调一下思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档