【autojs快速搭建http服务教程】

背景:我想从电脑端发送一个网络请求控制autojs执行某段代码,于是我想到了可以用autojs搭建一个http服务,然后在电脑端发送get请求来让autojs开始执行某段代码,然鹅,autojs并没有搭建http服务的教程,然后我想到了可以通过nodejs或者java代码来实现,于是就有了下面的教程:

想通过autojs搭建http服务的话,思路有两种:

1、使用autojs的v8、v9版本,通过nodejs来实现,在这里不做讨论,感兴趣的同学可以查看相关资料;

2、使用java的ServerSocket功能来实现,如下所示:

importClass(java.io.BufferedReader);
importClass(java.io.BufferedWriter);
importClass(java.io.IOException);
importClass(java.io.InputStreamReader);
importClass(java.io.OutputStreamWriter);
importClass(java.net.ServerSocket);
importClass(java.net.Socket);
importClass(java.nio.ByteBuffer);
importClass(java.io.PrintWriter);

// 字符串转bytes
function strToUtf8Bytes(str) {
    const utf8 = [];
    for (let ii = 0; ii < str.length; ii++) {
        let charCode = str.charCodeAt(ii);
        if (charCode < 0x80) utf8.push(charCode);
        else if (charCode < 0x800) {
            utf8.push(0xc0 | (charCode >> 6), 0x80 | (charCode & 0x3f));
        } else if (charCode < 0xd800 || charCode >= 0xe000) {
            utf8.push(0xe0 | (charCode >> 12), 0x80 | ((charCode >> 6) & 0x3f), 0x80 | (charCode & 0x3f));
        } else {
            ii++;
            // Surrogate pair:
            // UTF-16 encodes 0x10000-0x10FFFF by subtracting 0x10000 and
            // splitting the 20 bits of 0x0-0xFFFFF into two halves
            charCode = 0x10000 + (((charCode & 0x3ff) << 10) | (str.charCodeAt(ii) & 0x3ff));
            utf8.push(
                0xf0 | (charCode >> 18),
                0x80 | ((charCode >> 12) & 0x3f),
                0x80 | ((charCode >> 6) & 0x3f),
                0x80 | (charCode & 0x3f),
            );
        }
    }
    //兼容汉字,ASCII码表最大的值为127,大于127的值为特殊字符
    for (let jj = 0; jj < utf8.length; jj++) {
        var code = utf8[jj];
        if (code > 127) {
            utf8[jj] = code - 256;
        }
    }
    return utf8;
}

var server;
// 退出时结束服务
events.on('exit', () => {
    if (server && server.close) {
        server.close();
    }
});
try {
    server = new ServerSocket(9000); // 9000为端口号
    while (true) {
        console.log("启动服务器....");
        var socket = server.accept();
        var is = socket.getInputStream();
        is.read(util.java.array('byte', 2048));
        var os = socket.getOutputStream();
        os.write(strToUtf8Bytes("HTTP/1.1 200 OK\r\n"));
        os.write(strToUtf8Bytes("Content-Type:text/html;charset=utf-8\r\n"));
        os.write(strToUtf8Bytes("Content-Length:38\r\n"));
        os.write(strToUtf8Bytes("Server:gybs\r\n"));
        os.write(strToUtf8Bytes(("Date:"+new Date()+"\r\n")));
        os.write(strToUtf8Bytes("\r\n"));
        os.write(strToUtf8Bytes("<h1>hello!</h1>"));
        os.write(strToUtf8Bytes("<h3>HTTP服务器!</h3>"));
        os.close();
        socket.close();
        toastLog("请求已响应");
        // 此处放置接收到http请求时需要执行的代码
    }
    if (server && server.close) {
        server.close();
    }
} catch (e) {
    console.log("error:", e);
    if (server && server.close) {
        server.close();
    }
}

这样访问 http://127.0.0.1:9000 或者内网IP,就可以愉快的在内网中从不同的设备发送网络请求(Get请求之类的)到autojs的脚本中来了,同时还可以基于入参及请求方式做其他扩展,这里就不一一展示了;若想从外网发送请求到手机的autojs脚本,则还需要将手机的网络做内网穿透。

注意:有时程序或脚本关闭时,ServerSocket的服务可能还没结束,可能会报端口被占用,需要杀掉进程。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值