当前位置: 首页 > article >正文

Java代码实现Httpclient调用-验证码登录拦截获取到列表数据写入数据库

        这几天来了一个需求,是需要使用Java代码实现,接口调用,调用的系统是,数睿通,需要将里面的列表39条数据写入数据库,前提是不能直接调用列表,需要先调用获取到图片验证码然后调用登录接口,然后获取到token,最后拿到token去访问列表,然后使用mybatis映射mapper写入数据库

基本流程图:

登录数睿通需要的实体类

@Data
public class User {
    private String username;
    private String password;
    private String captcha;
    private String key;
}

一共三个配置类:

登录配置:TestUserLogin

package com.bwie.user.config;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.common.comm.ServiceClient;
import com.bwie.common.domain.PO.User;
import com.bwie.common.result.Result;
import com.bwie.user.config.Tools;
import com.bwie.user.config.UserCodePic;
import okhttp3.Request;
import okhttp3.RequestBody;

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

/**
 * @Author:liurui
 * @Package:com.bwie.user.controller
 * @Project:sxs_lx
 * @name:TestUserLogin
 */
public class TestUserLogin {

    public static String main() {
        HashMap<String, String> map = UserCodePic.main();



        String word = map.get("word");
        String key = map.get("key");
        User user = new User();

        user.setUsername("账号");
        user.setPassword("密码");
        user.setCaptcha(word);
        user.setKey(key);

        String jsonString = JSONObject.toJSONString(user);

        HttpRequest request = HttpRequest.post("http://数睿通IP:81/sys/auth/login")
                .contentType("application/json") // 设置请求头为 application/json
                .body(jsonString); // 设置请求体为 JSON 字符串

        HttpResponse response = request.execute();

        String body = response.body();
        Result result = JSONObject.parseObject(body, Result.class);
        Map resultData = (Map) result.getData();

        Object accessToken = resultData.get("access_token");

        return accessToken.toString();
    }
}

识别图片验证码的阿里云工具类:Toos

package com.bwie.user.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;

@Log4j2
public class Tools {
    public static String main(String body1) {
        String host = "https://imgurlocr.market.alicloudapi.com";// 【1】请求地址 支持http 和 https 及 WEBSOCKET
        String path = "/urlimages"; // 【2】后缀
        String appcode = "**替换成自己的AppCode**"; // 【3】开通服务后 买家中心-查看AppCode
        String body = "image=" + body1;

        String urlSend = host + path; // 【5】拼接请求链接
        try {
            URL url = new URL(urlSend);
            HttpURLConnection httpURLCon = (HttpURLConnection) url.openConnection();
            httpURLCon.setRequestMethod("POST");
            httpURLCon.setRequestProperty("Authorization", "APPCODE " + appcode);// 格式Authorization:APPCODE
                                                                                        // (中间是英文空格)
            StringBuilder postData = new StringBuilder(body);

            byte[] postDataBytes = postData.toString().getBytes("UTF-8");
            httpURLCon.setDoOutput(true);
            OutputStream out = httpURLCon.getOutputStream();
            out.write(postDataBytes);
            out.close();
            int httpCode = httpURLCon.getResponseCode();
            if (httpCode == 200) {
                String json = read(httpURLCon.getInputStream());
                return json;
            } else {
                Map<String, List<String>> map = httpURLCon.getHeaderFields();
                String error = map.get("X-Ca-Error-Message").get(0);
                if (httpCode == 400 && error.equals("Invalid AppCode")) {
                    log.info("AppCode错误 ");
                } else if (httpCode == 400 && error.equals("Invalid Url")) {
                    log.info("请求的 Method、Path 或者环境错误");
                } else if (httpCode == 400 && error.equals("Invalid Param Location")) {
                    log.info("参数错误");
                } else if (httpCode == 403 && error.equals("Unauthorized")) {
                    log.info("服务未被授权(或URL和Path不正确)");
                } else if (httpCode == 403 && error.equals("Quota Exhausted")) {
                    log.info("套餐包次数用完 ");
                } else if (httpCode == 403 && error.equals("Api Market Subscription quota exhausted")) {
                    log.info("套餐包次数用完,请续购套餐");
                } else {
                    log.info(httpCode);
                    log.info("参数名错误 或 其他错误");
                    log.info(error);
                }
            }

        } catch (MalformedURLException e) {
            log.info("URL格式错误");
        } catch (UnknownHostException e) {
            log.info("URL地址错误");
        } catch (Exception e) {
            // 打开注释查看详细报错异常信息
             e.printStackTrace();
        }
        return null;
    }

    /*
     * 读取返回结果
     */
    private static String read(InputStream is) throws IOException {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine()) != null) {
            line = new String(line.getBytes(), "utf-8");
            sb.append(line);
        }
        br.close();
        return sb.toString();
    }
}

获取验证码图片的配置:UserCodePic

package com.bwie.user.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bwie.common.domain.ImageUrl;
import com.bwie.common.domain.R;
import lombok.extern.log4j.Log4j2;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.*;
import java.util.HashMap;
import java.util.List;

/**
 * @Author:liurui
 * @Package:com.bwie.user.config
 * @Project:sxs_lx
 * @name:UserCodePic
 */
@Log4j2
public class UserCodePic {

    public static HashMap<String,String> main() {
        String url = "http://数睿通Ip/sys/auth/captcha?t=1726215264480";

        HttpGet httpGet = new HttpGet(url);

        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            CloseableHttpResponse response = httpClient.execute(httpGet);

            String string = EntityUtils.toString(response.getEntity());

            JSONObject jsonObject = JSON.parseObject(string);

            Object image = jsonObject.get("data");

            String jsonString = JSONObject.toJSONString(image);

            JSONObject jsonObject1 = JSON.parseObject(jsonString);

            Object image1 = jsonObject1.get("image");

            Object key = jsonObject1.get("key");

            String imageBase64 = JSONObject.toJSONString(image1);

            String key1 = JSONObject.toJSONString(key);

            String replace = imageBase64.replace("\"", "");

            String key2 = key1.replace("\"", "");

            String main = Tools.main(replace);

            ImageUrl imageUrl = JSON.parseObject(main, ImageUrl.class);

            String word = imageUrl.getResult().get(0).getWords();

            HashMap<String, String> map = new HashMap<>();

            map.put("key",key2);
            map.put("word",word);

            return map;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

调用数睿通列表接口:

    @GetMapping("/test")
    public void test(){
        String token = TestUserLogin.main();

        //调用10002接口
        String url1 = "http://数睿通IP/data-integrate/project/change-project/10002";
        HttpPut httpPut = new HttpPut(url1);
        httpPut.setHeader(new BasicHeader("Authorization",token));
        CloseableHttpClient httpClient1 = HttpClients.createDefault();
        try {
            CloseableHttpResponse response1 = httpClient1.execute(httpPut);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        //列表接口调用
        String url = "http://数睿通IP/data-integrate/database/page?order=&asc=false&page=1&limit=100&name=&databaseType=&databaseName=&databaseSchema=&status=&isRtApprove=&projectId=&t=1726197029260";
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader(new BasicHeader("Authorization",token));
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            CloseableHttpResponse response = httpClient.execute(httpGet);

            String string = EntityUtils.toString(response.getEntity());

            // 使用 JSONObject 来解析整个 JSON 字符串
            JSONObject jsonObject = JSONObject.parseObject(string);

            // 从 jsonObject 中获取 data 对象
            JSONObject dataObject = jsonObject.getJSONObject("data");

            // 从 data 对象中获取 list 数组
            JSONArray listArray = dataObject.getJSONArray("list");

            List<ShuRuiTong> shuRuiTongs = listArray.toJavaList(ShuRuiTong.class);
            //List集合写入数据库
            service.add(shuRuiTongs);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }


http://www.kler.cn/news/308054.html

相关文章:

  • 昇腾服务器(Atlas800系列)部署embedding和rerank模型
  • USBCANFD卡再汽车电子行业中得应用
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十二)
  • python学习第十节:爬虫基于requests库的方法
  • python开发目录扫描工具
  • Vue3.5+ 响应式 Props 解构
  • 响应式网站的网站建设,需要注意什么?
  • win11 运行vmware workstation 虚拟机很卡,解决办法
  • 应用程序已被 Java 安全阻止:Java 安全中的添加的例外站点如何对所有用户生效
  • Rust 常见问题汇总
  • 【Kubernetes】linux centos安装部署Kubernetes集群
  • OpenHarmony鸿蒙( Beta5.0)RTSPServer实现播放视频详解
  • vue3 自定义el-tree树形结构样式
  • 【机器学习随笔】基于kmeans的车牌类型分类注意点
  • Java抽象/接口讲解(第五节)抽象类和接口的区别
  • 【C++】——继承详解
  • oracle 用游标为什么会比for循环慢?
  • 说说“天上一天地上一年”该怎么理解
  • Golang | Leetcode Golang题解之第404题左叶子之和
  • 递归10小题
  • BSN六周年:迈向下一代互联网
  • 『功能项目』制作提示主角升级面板【56】
  • AI时代个人发展
  • MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差
  • 深度学习----------------------文本预处理
  • 进阶SpringBoot之异步任务、邮件任务和定时执行任务
  • 2024最新版MySQL详细学习教程
  • 算法两道题
  • PyCharm 安装
  • 【重学 MySQL】二十八、SQL99语法新特性之自然连接和 using 连接