首先:我需要做一个玩家省份统计的需求,我只有他们的IP 如果然我一个个去百度搜IP,然后一个个输入,简直太要命,所以,我做了一个用Java 代替人力 用IP去换物理地址
思路:我在访问淘宝IP地址库的时候发现了 每次搜索 都会发送一个Http协议的Post的请求,并发现了 这是一个Json响应的结果。
我就想:利用Java代码 模拟Restful风格的接口 不也能做到同样的效果么,当然,这里的模拟是指 模拟 人 手动发送请求。
首先,要找到Http的请求工具,我想了一下Hutool库中有此工具,Maven如下
<!-- Hutool工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.6</version> <!-- 版本会更新 想用最新的版本在:https://www.hutool.cn/docs/#/ -->
</dependency>
然后发送了请求,我得需要处理 Json 吧,那就使用传说中的 Alibaba 的 FastJson 吧,当然也可以用我的Jsop来处理。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.74</version>
</dependency>
既然 得了此 两员(FastJson、Hutool的HttpUtil)大将,那就开始盘它。
这里,再次强调一下思路
利用Hutool的HttpUtil,发送Post请求,得到一个请求结果(是String字符串)。在使用FastJson处理请求结果到Map集合,以展示数据。
我们需要的数据在data里面,所以,要拿出来data数据,作为String,在经过FastJson处理一下,得到的Map集合,我们就可以随便控制输出了。
代码如下
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"));
}
}
完结!
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)