package com.jm.mail.tools; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import com.jm.hsw.tools.File_Tools; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class Gain_QQ { /** * POST **/ public static String sendPostRequest(String requestUrl, String payload,String Cookie) { StringBuffer jsonString = new StringBuffer(); HttpURLConnection connection=null; BufferedReader br=null; try { URL url = new URL(requestUrl); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("user-agent", "Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; Trident/5.0)"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); connection.setRequestProperty("Cookie",Cookie); connection.setRequestProperty("origin","https://qun.qq.com"); connection.setRequestProperty("referer","https://qun.qq.com/member.html"); connection.setReadTimeout(300000); connection.setConnectTimeout(300000); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); writer.write(payload); writer.close(); br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = br.readLine()) != null) { jsonString.append(line); } br.close(); connection.disconnect(); }catch(Exception e){ e.printStackTrace(); br = new BufferedReader(new InputStreamReader(connection.getErrorStream()) ); String line; try { while ((line = br.readLine()) != null) { jsonString.append(line); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }finally{ connection.disconnect(); try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return jsonString.toString(); } /** * 将Unix时间戳转换成指定格式日期 * @param timestampString Unix时间戳 * @param formats 格式("yyyy-MM-dd HH:mm:ss") * @return */ public static String TimeStamp2Date(String timestampString, String formats){ Long timestamp = Long.parseLong(timestampString)*1000; String date = new java.text.SimpleDateFormat(formats).format(new java.util.Date(timestamp)); return date; } /** * 获取数据并处理数据 * @param qq_name QQ群的名字 * @param size qq群总人数 * @param gc qq群号 * @param bkn 我也不知道是啥 * @param Cookie 进入https://qun.qq.com/member.html#gid=224392232,按F12 点击网络,点开请求"http://qun.qq.com/cgi-bin/qun_mgr/search_group_members" 获取里面的参数和Cookie * @return QQ数据 * @throws Exception */ public static List<String> processing(String qq_name,int size,String gc,String bkn,String Cookie) throws Exception{ //存放每个QQ详细数据 List<String> olist = new ArrayList<String>(); olist.add("uin"+" "+"role"+" "+"flag"+" "+"g"+" "+"join_time"+" "+"last_speak_time"+" "+"lv"+" "+"nick"+" "+"card"+" "+"qage"+" "+"tags"+" "+"rm"+" "+"mailbox"); //控制偏移量 int i = 0; //控制循环次数 int j = 0; //控制是否跳出循环的boolean boolean judge = true; while(judge){ int st = i; //from(开始) int end = i+20; //end(结束) System.out.println(st+"---"+end+"---"+j+"---"+size/20); String requestUrl = "http://qun.qq.com/cgi-bin/qun_mgr/search_group_members?gc="+gc+"&st="+st+"&end="+end+"&sort=0&bkn="+bkn; //把获取的参数转换成JSON字符串并清洗成可使用数据 JSONObject json_all = JSONObject.fromObject(sendPostRequest(requestUrl, "",Cookie)); //获取JSON串中的mems数组 if(json_all.get("mems")!=null){ String qq_all = json_all.get("mems").toString(); //把数组导入到JSONArray中方便数据处理 JSONArray json_qq = JSONArray.fromObject(qq_all); for(int le = 0 ; le <json_qq.size();le++){ JSONObject qq = JSONObject.fromObject(json_qq.get(le)); //把每个QQ转换成一条数据并存入List集合 String all = qq.getString("uin")+" "+ qq.getString("role")+" "+ qq.getString("flag")+" "+ qq.getString("g")+" "+ TimeStamp2Date(qq.getString("join_time"), "yyyy-MM-dd")+" "+ TimeStamp2Date(qq.getString("last_speak_time"), "yyyy-MM-dd")+" "+ qq.getString("lv")+" "+ qq.getString("nick")+" "+ qq.getString("card")+" "+ qq.getString("qage")+" "+ qq.getString("tags")+" "+ qq.getString("rm")+" "+ qq.getString("uin")+"@qq.com"; olist.add(all); } } j++; //控制循环次数 if(j==size/21){ judge = false; //循环完毕后跳出循环 }else{ i+=21; } System.out.println("已扫描人数:"+i); Thread.sleep(1500); } return olist; } public static void main(String[] args) throws InterruptedException { //QQ群的名字 String qq_name = "淘宝优惠券购物21(795017653) "; //qq群总人数 int size = 1975; //qq群号 String gc = "795017653"; //我也不知道是啥,反正一定要填 String bkn = "965542128"; //网址Cookie String Cookie = "pgv_pvid=8083393588; pgv_pvi=5516345344; RK=mgZFXvKpRv; ptcz=25714188ed89e451a67f74be787ccf060a153d84fc8348cff2a6d79ed1c821eb; ts_last=qun.qq.com/member.html; ts_uid=6204078620; ts_refer=xui.ptlogin2.qq.com/cgi-bin/xlogin; pgv_info=ssid=s928689886; pgv_si=s3042974720; _qpsvr_localtk=0.17590207084640497; ptisp=ctc; p_uin=o3385341634; pt4_token=wjsRFVOzK-kGq7B3P2B54XADw5Ik6jXlt6J**zw3rcc_; p_skey=jChYYIB*ibH--AKwTf1846Vv5VxZV1aNd17yRM8u7so_; traceid=9a4df933cb; uin=o3385341634; skey=@zFiVy8rCf"; List<String> olist; try { olist = processing(qq_name, size, gc, bkn, Cookie); if(olist.size()>0){ File_Tools.add_File_list("D:\结果\"+qq_name+".txt", olist); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
获取这些信息的网站:https://qun.qq.com/member.html#gid=QQ群号
然后F12打开无障碍环境属性
点击网络 找到
请求网址:https://qun.qq.com/cgi-bin/qun_mgr/search_group_members
请求方法:POST