autojs 代码

以下是使用 Auto.js 编写的代码,即先向服务器上传图片并携带参数,然后根据返回的图片索引去循环查询服务器上该图片的处理信息的功能。 Auto.js 主要用于安卓平台的自动化操作,在进行网络请求等操作时需要注意安卓的相关权限设置等情况。

autojs 代码

 

// 最大查询次数
const MAX_QUERY_TIMES = 60;
// 查询间隔时间(单位:毫秒)
const QUERY_INTERVAL = 1000; 

// 发送POST请求上传图片并携带参数,返回服务器响应内容
function uploadImageWithParams(imagePath, uploadUrl, parameters) {
    let httpClient = new java.net.HttpURLConnection();
    try {
        let url = new java.net.URL(uploadUrl);
        httpClient = url.openConnection();
        httpClient.setRequestMethod("POST");
        httpClient.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
        httpClient.setDoOutput(true);

        let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
        let outputStream = httpClient.getOutputStream();
        let writer = new java.io.OutputStreamWriter(outputStream, "UTF-8");

        // 添加参数部分到请求体
        for (let key in parameters) {
            writer.write("--" + boundary + "\r\n");
            writer.write("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n");
            writer.write(parameters[key] + "\r\n");
        }

        // 添加图片文件部分到请求体
        writer.write("--" + boundary + "\r\n");
        writer.write("Content-Disposition: form-data; name=\"imageFile\"; filename=\"" + files.getName(imagePath) + "\"\r\n");
        writer.write("Content-Type: image/jpeg\r\n\r\n");
        writer.flush();

        let fileInputStream = new java.io.FileInputStream(imagePath);
        let buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
        let bytesRead;
        while ((bytesRead = fileInputStream.read(buffer))!= -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        fileInputStream.close();

        writer.write("\r\n--" + boundary + "--\r\n");
        writer.flush();
        outputStream.close();

        let responseCode = httpClient.getResponseCode();
        if (responseCode == java.net.HttpURLConnection.HTTP_OK) {
            let inputStream = httpClient.getInputStream();
            let result = "";
            let reader = new java.io.BufferedReader(new java.io.InputStreamReader(inputStream, "UTF-8"));
            let line;
            while ((line = reader.readLine())!= null) {
                result += line;
            }
            reader.close();
            inputStream.close();
            return result;
        } else {
            let errorStream = httpClient.getErrorStream();
            let errorResult = "#";
            if (errorStream!= null) {
                let reader = new java.io.BufferedReader(new java.io.InputStreamReader(errorStream, "UTF-8"));
                let line;
                while ((line = reader.readLine())!= null) {
                    errorResult += line;
                }
                reader.close();
                errorStream.close();
            }
            return errorResult;
        }
    } catch (e) {
        return "#" + e.toString();
    } finally {
        if (httpClient!= null) {
            httpClient.disconnect();
        }
    }
}

// 查询图片在服务器上的信息
function queryImageInfo(imageIndex) {
    let queryUrl = "http://dt1.hyocr.com:8080/Query.php?sid=" + imageIndex;
    let queryTimes = 0;
    while (queryTimes < MAX_QUERY_TIMES) {
        let httpClient = new java.net.HttpURLConnection();
        try {
            let url = new java.net.URL(queryUrl);
            httpClient = url.openConnection();
            httpClient.setRequestMethod("GET");

            let responseCode = httpClient.getResponseCode();
            if (responseCode == java.net.HttpURLConnection.HTTP_OK) {
                let inputStream = httpClient.getInputStream();
                let result = "";
                let reader = new java.io.BufferedReader(new java.io.InputStreamReader(inputStream, "UTF-8"));
                let line;
                while ((line = reader.readLine())!= null) {
                    result += line;
                }
                reader.close();
                inputStream.close();
                result = result.trim();
                if (result === "") {
                    console.log("服务器仍在处理图片,请稍候...");
                } else if (result.startsWith("#")) {
                    console.error("图片处理出错,错误信息: " + result);
                    break;
                } else {
                    console.log("图片处理成功,信息: " + result);
                    break;
                }
            } else {
                console.error("查询图片信息时请求出错,状态码: " + responseCode);
                break;
            }
        } catch (e) {
            console.error("查询出现异常: " + e.toString());
            break;
        } finally {
            if (httpClient!= null) {
                httpClient.disconnect();
            }
        }
        queryTimes++;
        // 休眠指定时间
        sleep(QUERY_INTERVAL);
    }
    if (queryTimes == MAX_QUERY_TIMES) {
        console.error("已达到最大查询次数,仍未获取到有效图片处理信息");
    }
}

// 图片文件的本地路径,替换为实际要上传的图片路径
let imagePath = "/sdcard/pictures/test.jpg";
// 上传图片的服务器接口地址,替换为真实有效的地址
let uploadUrl = "http://dt1.hyocr.com:8080/uploadpic.php";
// 模拟多个请求参数,可根据实际情况替换具体值
let parameters = {
    "dati_type": "8091",  //答题类型
    "acc_str": "xxxxxxxxxxxx",//用户自己的答题串 以便计费 登录账号查询自己的答题密码串
    "extra_str": "题目是。。。。"  ,//描述问题内容,以便答题人员能够理解答题
    "zz": ""  ,//作者帐号(给予返利)
    "pri": "9"  ,//优先级
    "timeout": "70"  , //答题时间不要太小,否则容易超时而不能返回结果 
}; 
let imageIndex = uploadImageWithParams(imagePath, uploadUrl, parameters);
if (imageIndex &&!imageIndex.startsWith("#")) {
    queryImageInfo(imageIndex);
} else {
    console.error("图片上传出错,错误信息: " + imageIndex);
}

说明:xxxxxxxxxxxxxxx替换成密码串 提交成功后会返回一组字符串 直接用这个字符串每1秒循环get提交到http://dt1.hyocr.com:8080/Query.php 即可 一直取到答案为止 取到答案判断 一下答案的第一个字符串 如果为“#” 即为报错了 如果不是#开头 即为返回的答案