Java реализует захват данных публичной учетной записи 👣

Java
Java реализует захват данных публичной учетной записи 👣

Не бойтесь думать, не бойтесь делать, творчество исходит из жизни 🥴

предисловие

Вчера, когда я проверил, сколько электричества осталось в моей комнате на официальном аккаунте, я почувствовал, что эти операции очень громоздкие и хлопотные, поэтому мне пришла в голову идея использовать JAVA, чтобы спуститься по этим данным.

Полазив по данным, вы можете использовать данные для многих вещей.Далее я поделюсь с вами, как реализовать свои идеи через Java.Заинтересованные разработчики могут прочитать эту статью.

Строительство окружающей среды

Версия JDK: 1.8

версия jsoup: 1.12.1

Компилятор: ИДЕЯ

  • Тип проекта выберите Java и нажмите «Далее».
  • Нажмите "Далее
  • Заполните название проекта и путь проекта Нажмите «Далее»
  • Создайте папку пакета и lib в src
  • отmavenСкачать со складаjsoupВерсия 1.12.1
  • После загрузки пакета jar скопируйте его в каталог lib проекта и примените.

Получить интерфейс общедоступной учетной записи

Получите интерфейс входа

  • Откройте домашнюю страницу официального аккаунта, выберите открытие в браузере и скопируйте его ссылку.
  • Откройте ссылку, которую вы только что получили, в браузере вашего ПК.
  • Откройте инструмент захвата пакетов, используйте charles здесь. После просмотра URL-адреса в адресной строке мы обнаруживаем, что все параметры входа указаны в URL-адресе. В настоящее время нам нужно только ввести номер нашего мобильного телефона и пароль в URL-адресе. и нажмите Enter, чтобы инициировать запрос.
// url中loginPhone和password就是我们需要进行填写的参数
var url = "http://www.quanfangtong.net/phonehtml/phoneLogin/login.action?loginPhone=xxxxx&password=xxx&conpanyId=Company_20170627113853JMD7cK&language=Chinese";
  • Откройте инструмент захвата пакетов, чтобы просмотреть перехваченные запросы.
通过抓包工具,我们获取到了如下信息
   1.接口的url地址
   2.调用接口需要的参数
   3.http的请求报文,从报文中了解到此方法为get请求,以及他header中需要的参数和值

Получить интерфейс запроса мощности

  • Работать в браузере ПК и введите страницу Power Query
  • Соблюдайте URL-адрес текущего браузера, откройте инструмент захвата пакетов, чтобы найти интерфейс запроса питания.
通过抓包工具,我们获取到了如下信息
    1. 登录后返回了cookie过来,每次请求通过cookie来验证身份
    2. 请求方式为get

На данный момент мы получили интерфейс для power query и параметры, которые ему нужно передать.Дальше используем код для реализации захвата😜

написать класс инструмента

  • Создайте класс JsoupUtils в пакете util.

Согласно информации в интерфейсе и сообщении http-запроса, которое мы получили выше, мы инициируем запрос через пакет плагинов Jsoup и конструируем полученную информацию. метод входа в систему, он вернет файл cookie. Метод получения информации о мощности, согласно DOM-структуре страницы, найти необходимую информацию, поместить ее в HashMap и вернуть. Пожалуйста, перейдите к синтаксису Jsoup:Документация Jsoup на китайском языке

package com.lk.util;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class JsoupUtils {
    /**
     * 获取cookie
     * @param loginUrl
     * @param data
     * @return
     * @throws IOException
     */
    public Map<String, String> jsoupCookieLogin(String loginUrl, HashMap<String,String> data) throws IOException {
        // 发起登录请求
        Connection.Response login = Jsoup.connect(loginUrl)
                // 忽略类型验证
                .ignoreContentType(true)
                // 禁止重定向
                .followRedirects(false)
                .postDataCharset("utf-8")
                // 设置请求头相关信息
                .header("Upgrade-Insecure-Requests","1")
                .header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
                .header("Accept-Encoding","gzip, deflate")
                .header("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8")
                .header("Connection","keep-alive")
                .header("User-Agent","Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36")
                // 登录接口需要参数
                .data(data)
                // 登录接口的请求方法
                .method(Connection.Method.GET)
                // 执行
                .execute();
        // 设置字符集编码
        login.charset("UTF-8");
        // 打印接口返回的cookies
        return login.cookies();
    };

    /**
     * 获取电量信息
     * @param cookie
     * @param url
     * @return
     * @throws IOException
     */
    public HashMap<String,String> getBatteryInfo(Map<String,String> cookie,String url) throws IOException {
        // 电量信息
        HashMap<String, String> batteryInfo = new HashMap<>();
        // 调用电量查询接口,获取返回的Dom
        Document document = Jsoup.connect(url)
                // 设置cookies
                .cookies(cookie)
                .get();
        // 解析Dom获取电量信息
        if (!document.title().equals("错误页面")) {
            // 今日用电
            String electricityToday = document.body().select("div > div > div").eq(2).text();
            // 剩余电量
            String remainingBattery = document.body().select("div > div > div").eq(3).text() + "度";
            // 本月累计用电
            String currentMonthBatteryTotal = document.body().select("div > div > div").eq(5).text();
            // 统计时间
            String time = document.body().select("div > div > div").eq(6).text();
            // 电量信息赋值
            batteryInfo.put("electricityToday", electricityToday);
            batteryInfo.put("remainingBattery", remainingBattery);
            batteryInfo.put("currentMonthBatteryTotal", currentMonthBatteryTotal);
            batteryInfo.put("time", time);
            batteryInfo.put("code", "0");
            batteryInfo.put("msg", "获取成功");
        } else {
            batteryInfo.put("code", "1");
            batteryInfo.put("msg", "获取失败");
        }
        return batteryInfo;
    }

}

Тестовый инструмент класс

  • Создайте класс NetWorkTest в пакете httpNetWork и вызовите метод в классе инструмента в основном методе для тестирования.
package com.lk.httpNetWork;

import com.lk.util.JsoupUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class NetWorkTest {

    public static void main(String[] args) throws IOException {
        // 接收返回的Cookie
        Map<String,String> cookie;
        // 构造登录参数
        HashMap<String,String> UserInfo = new HashMap<>();
        UserInfo.put("loginPhone","****");
        UserInfo.put("password","****");
        UserInfo.put("conpanyId","Company_20170627113853JMD7cK");
        UserInfo.put("language","Chinese");
        JsoupUtils jsoupUtils = new JsoupUtils();
        // 调用cookie登录函数获取cookie
        cookie = jsoupUtils.jsoupCookieLogin("http://www.quanfangtong.net/phonehtml/phoneLogin/login.action",UserInfo);
        // 调用获取电量信息方法
        HashMap<String,String> batteryInfo = jsoupUtils.getBatteryInfo(cookie,"http://www.quanfangtong.net/phonehtml/myIntelligent/findMyelec.action");
        if(batteryInfo.get("code").equals("0")){
            System.out.println("今日用电: " + batteryInfo.get("electricityToday"));
            System.out.println("剩余电量: " + batteryInfo.get("remainingBattery"));
            System.out.println("本月累计用电: " + batteryInfo.get("currentMonthBatteryTotal"));
            System.out.println("统计时间: " + batteryInfo.get("time"));
        }else{
            System.out.println(batteryInfo.get("msg"));
        }

    }
}
  • Результаты

напиши в конце

На этом процесс получения Java информации со счетчика электроэнергии в моей комнате закончен, теперь мы получаем данные, пишем интерфейс на сервере, вызываем метод в классе инструмента, получаем информацию об электроэнергии и возвращаем ее вызывающей стороне .После звонящего получают данные, которые можно отобразить в произвольном виде.Позже планирую написать гаджет на стороне Mac для вывода данных,возвращаемых интерфейсом,в верхнюю панель.Заинтересованным разработчикам просьба продолжать обращать внимание .

  • Если в статье есть ошибки, исправьте их в комментариях, если статья вам поможет, ставьте лайк и подписывайтесь 😊
  • Эта статья была впервые опубликована на Наггетс, перепечатка без разрешения запрещена 💌