目前存在的问题:1,正则匹配有问题,故代码中注释了正则匹配,改为全部输出,可自行复制出来,手动搜索如555等关键的信息,即可获取想要的手机号码
2,地区暂时是深圳的,可以改URL中的城市编码,或者通过抓包抓到该URL值,直接替换即可。
3,请求速度过快会导致请求终止
[Java] 纯文本查看 复制代码 //此链接为联通亲情卡请求地址
public static String QQK_URL = "https://m.10010.com/NumApp/NumberCenter/qryNum?callback=jsonp_queryMoreNums&provinceCode=" +
"51&cityCode=540&monthFeeLimit=0&groupKey=7100388009&searchCategory=3&net=01&amounts=200&codeTypeCode=" +
"&searchValue=&qryType=02&goodsNet=4&_=";
[Java] 纯文本查看 复制代码 public static void run(){
while (true){
//获取以毫秒级的时间戳
long time = new Date().getTime();
//获取联通的号码
String result = HttpUtils.sendGet(QQK_URL, time);
//去掉头部和尾部不需要的数据,以便转换JSON
String substring = result.substring(20, result.length() - 1);
//将获取到的数据再转换为Map
Map<String, Object> stringObjectMap = JsonUtils.toMap(substring);
//得到指定key的值
String numArrayStr = stringObjectMap.get("numArray").toString();
//截取指定的数据,并且分成数组
String[] numArrays = numArrayStr.substring(1, numArrayStr.length() - 1).split(",");
//存过滤后的数据
List<String> phoneList = new ArrayList<String>();
//去掉不是电话号码的数据
for (String phone : numArrays) {
//有些数据为0,1,0这样的数据,想要去掉
if (phone.length() > 3) {
phoneList.add(phone);
}
}
//循环匹配正则
for (String phone : phoneList) {
//循环匹配正则,匹配到的就输出,匹配不成功则不输出,该正则有问题,目前注释
//Regular.outInfo(phone);
System.out.println(phone);
}
//System.out.println("此处为本次获取到的所有数据:" + phoneList.toString());
// System.out.println("等待5秒后开始……");
//Thread.sleep(5000);
}
}
思路:其实很简单,就是在联通营业厅APP中,办理亲情卡,通过Charles进行抓包,把抓到的URL拿到代码中进行解析成我们想要的数据,此URL为大王卡办理亲情卡的URL地址,
其他地址也可以类似这样的写法,只不过在解析json的时候,需要改变一下即可,小弟第一次写,请大神勿喷。
|