JAVA獲取長沙住房APP認籌樓盤列表,通過QQ/微信發送信息提示

 1.通過Fiddler工具抓包:拿到列表頁的http請求

操作方法:https://jingyan.baidu.com/article/4dc40848617b1dc8d846f16d.html

2.通過抓包得知需要先模擬登錄,然後才能獲取列表數據

3.通過調取窗口模擬發送消息

附下面代碼:

package com.leo;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

@Component
public class SendMsgTool {

    private String cookieVal = "";

    @PostConstruct
    private void init() throws IOException {
        // 連接地址(通過閱讀html源代碼獲得,即爲登陸表單提交的URL)
        String surl = "http://app.cszjxx.net:18000/api/login/zjw/user/logincode";

/**
 * 首先要和URL下的URLConnection對話。 URLConnection可以很容易的從URL得到。比如: // Using
 * java.net.URL and //java.net.URLConnection
 */
        URL url = new URL(surl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

/**
 * 然後把連接設爲輸出模式。URLConnection通常作爲輸入來使用,比如下載一個Web頁。
 * 通過把URLConnection設爲輸出,你可以把數據向你個Web頁傳送。下面是如何做:
 */
        connection.setDoOutput(true);  //打開輸出,向服務器輸出參數(POST方式、字節)(寫參數之前應先將參數的字節長度設置到配置"Content-Length"<字節長度>)
        connection.setDoInput(true);//打開輸入,從服務器讀取返回數據
        connection.setRequestMethod("POST"); //設置登錄模式爲POST(字符串大寫)
        connection.setInstanceFollowRedirects(false);
        connection.connect();
/**
 * 最後,爲了得到OutputStream,簡單起見,把它約束在Writer並且放入POST信息中,例如: ...
 */
        OutputStreamWriter out = new OutputStreamWriter(connection
                .getOutputStream(), "utf-8");
//其中code爲手機驗證碼,其它參數均爲登錄時需要的參數
        out.write("code=731788&czxtbb=113.8&gps=263.46&idfa=23E5D7FA-BB21-4113-92F5-C1EDS210A209&jzxx=460-0-0-0&scwl=wifi&sjhm=188888888&sjxh=iPhone_X&uuid=23E5D7FA-BB21-4113-92F5-C1EDS210A209&yys=運營商"); // post的關鍵所在!
//remember to clean up
        out.flush();
        out.close();

//取得cookie,相當於記錄了身份,供下次訪問時使用
//HttpURLConnection.getHeaderFields()).get("Set-Cookie")用於迭代讀取Cookie,爲以後使用
//HttpURLConnection.getHeaderField("Set-Cookie")也可用於讀取Cookie,但不一定能讀取完全
        cookieVal = connection.getHeaderField("Set-Cookie");  //格式:JSESSIONID=541884418E77E7F07363CCEE91D4FF7E; Path=/
        System.out.println("cookieVal: " + cookieVal);
        connection.disconnect();
    }
    @Scheduled(fixedDelay = 10000)
    private void find() throws IOException, AWTException {
        //登陸成功後,即可訪問其他URL了。
        String s = "http://app.cszjxx.net:18000/api/family/xf/user/renchoulist";
        //重新打開一個連接
        URL url = new URL(s);
        HttpURLConnection resumeConnection = (HttpURLConnection) url
                .openConnection();
        if (cookieVal != null) {
            //發送cookie信息上去,以表明自己的身份,否則會被認爲沒有權限
            resumeConnection.setRequestProperty("Cookie", cookieVal);//設置登陸配置
        }
        resumeConnection.connect();
        InputStream urlStream = resumeConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(urlStream));
        String ss = null;
        String res = "";
        while ((ss = bufferedReader.readLine()) != null) {
            res += ss;
        }
        System.out.println(res);
        JSONObject obj = JSONObject.parseObject(res);
        if(obj != null && obj.getString("code").equals("200")){
            JSONArray data = obj.getJSONArray("data");
            for (int m = 0; m < data.size(); m++) {
                JSONObject d = data.getJSONObject(m);
                System.out.println(d);
                String name = "紅星天鉑";
                if(d.getString("lpmc").contains(name)){
                    String sentence = name + "已開始認籌,麻溜的拿起手機開始你的操作!";// 定義要發送的話
                    Robot robot = new Robot();// 創建Robot對象
                    robot.delay(3000);// 延遲三秒,主要是爲了預留出打開窗口的時間,括號內的單位爲毫秒
                    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
                    for (int j = 0; j < 10; j++) {//循環次數
                        Transferable tText = new StringSelection(sentence);
                        clip.setContents(tText, null);
                        // for (int j = 1; j <= 1; j++) {
                        // 以下兩行按下了ctrl+v,完成粘貼功能
                        robot.keyPress(KeyEvent.VK_CONTROL);
                        robot.keyPress(KeyEvent.VK_V);

                        robot.keyRelease(KeyEvent.VK_CONTROL);// 釋放ctrl按鍵,像ctrl,退格鍵,刪除鍵這樣的功能性按鍵,在按下後一定要釋放,不然會出問題。crtl如果按住沒有釋放,在按其他字母按鍵是,敲出來的回事ctrl的快捷鍵。
                        robot.delay(500);// 延遲一秒再發送,不然會一次性全發佈出去,因爲電腦的處理速度很快,每次粘貼發送的速度幾乎是一瞬間,所以給人的感覺就是一次性發送了全部。這個時間可以自己改,想幾秒發送一條都可以
                        robot.keyPress(KeyEvent.VK_ENTER);// 回車
                        // }
                    }
                    // 以下三行爲將上述字符串放到剪切板內,相當於做了一次複製操作
                }
            }

        }
        bufferedReader.close();
    }
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章