这几天来了一个需求,是需要使用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);
}
}