Skip to main content

网络函数

说明

  • 网络模块函数主要是跟网络请求信息相关联
  • 网络模块的对象前缀是http,例如 http.downloadFile()这样调用

http.request 万能请求函数

  • HTTP万能请求
  • @param param map参数,包含的参数有
    • url:字符串 请求的地址
    • timeout:整型毫秒,超时时间
    • method: POST ,GET,PUT 字符串,代表请求的方法
    • proxy: 代理地址,map参数 包含主机和端口 例如 {"host":"11","port":111}
    • followRedirects:是否自动跳转 true 或者 false
    • requestBody: 请求的body体,如果是JSON,就是JSON字符串
    • userAgent:字符串 HTTP 的UA
    • ignoreContentType:是否忽略内容类型 true 或者 false
    • ignoreHttpErrors:是否忽略错误 true 或者 false
    • maxBodySize : 整型,HTTP BODY最大值
    • referrer:字符串,请求来源
    • header: HTTP 请求头,map参数,例如 {"UA":"test"}
    • cookie: HTTP 请求Cookie,map参数, 例如 {"a":1}
    • data:HTTP POST的数据,map参数, 例如 {"a":1}
    • file:要上传的文件,集合参数,例如
    • [{"key":"a1","fileName":"a.txt","filePath":"D:/"},{"key":"a1","fileName":"a.jpg","filePath":"D:/","contentType":"image/jpg"}]
    • 其中contentType可有可无
      • responseCharset: 字符串,强制设置响应内容的编码集
  • @return Response 对象或者null
tip
  • 如果请求内容是单独字符串,放在requestBody中请求
function main() {
http_request();
}

function http_request() {
//url:string
//timeout:int ms
//method: post ,get
//proxy: {"host":"11","port":111}
//followRedirects:true false
//requestBody: string
//userAgent:string
//ignoreContentType:true false
//ignoreHttpErrors:true false
//maxBodySize : int
//referrer:string
//header:{"UA":"test"}
//cookie:{"a":1}
//data:{"a":1}
//file:[{}]
//responseCharset: string
let md = utils.dataMd5("12345");
let md2 = utils.fileMd5("D:/sb.png");
let url = "http://192.168.0.5:8081/api/request";
let proxy = {"host": "192.168.0.5", "port": "100"};
let userAgent = "xxx";
let followRedirects = false;
let requestBody = JSON.stringify({"A": 111});
let ignoreContentType = true;
let ignoreHttpErrors = true;
let referrer = "xxx";
let header = {
"Content-Type": " application/json; charset=UTF-8",
"User-Agent": "from test",
"ddd": md,
"dd2": md2,
"imei": device.getDeviceId()
};
let cookie = {
"cookie1": "tst1",
"cookie2": "tst2"
};
let data = {
"a1": "aaa",
"pwd2": md,
"md2": md2
};
let file = [
{
"key": "file",
"fileName": "f.png",
"filePath": "D:/sb.png"
},
{
"key": "file",
"fileName": "f2.png",
"filePath": "D:/sde.png",
"contentType": "image/png"
}
];
let params = {
"url": url,
"method": "POST",
"userAgent": userAgent,
"referrer": "baidu.com",
"cookie": cookie,
"data": data,
"file": file
};
let x = http.request(params);
if (x) {
logd("header=> " + JSON.stringify(x.header));
logd("cookie=> " + JSON.stringify(x.cookie));
logd("statusCode=> " + x.statusCode);
logd("statusMessage=> " + x.statusMessage);
logd("charset=> " + x.charset);
logd("contentType=> " + x.contentType);
logd("body=> " + x.body);
} else {
loge("无结果");
}
}

main();

http.requestEx 万能请求函数(扩展)

  • HTTP万能请求
  • @param param map参数,包含的参数有
    • url:字符串 请求的地址
    • timeout:整型毫秒,超时时间
    • method: POST ,GET,PUT 字符串,代表请求的方法
    • proxy: 代理地址,map参数 包含主机和端口 例如 {"host":"11","port":111}
    • followRedirects:是否自动跳转 true 或者 false
    • requestBody: 请求的body体,如果是JSON,就是JSON字符串
    • userAgent:字符串 HTTP 的UA
    • ignoreContentType:是否忽略内容类型 true 或者 false
    • ignoreHttpErrors:是否忽略错误 true 或者 false
    • maxBodySize : 整型,HTTP BODY最大值
    • referrer:字符串,请求来源
    • header: HTTP 请求头,map参数,例如 {"UA":"test"}
    • cookie: HTTP 请求Cookie,map参数, 例如 {"a":1}
    • data:HTTP POST的数据,map参数, 例如 {"a":1}
    • file:要上传的文件,集合参数,例如
    • [{"key":"a1","fileName":"a.txt","filePath":"D:/"},{"key":"a1","fileName":"a.jpg","filePath":"D:/","contentType":"image/jpg"}]
    • 其中contentType可有可无
      • responseCharset: 字符串,强制设置响应内容的编码集
  • @return Response 对象或者null
tip
  • 如果请求内容是单独字符串,放在requestBody中请求
function main() {
http_request();
}

function http_request() {
//url:string
//timeout:int ms
//method: post ,get
//proxy: {"host":"11","port":111}
//followRedirects:true false
//requestBody: string
//userAgent:string
//ignoreContentType:true false
//ignoreHttpErrors:true false
//maxBodySize : int
//referrer:string
//header:{"UA":"test"}
//cookie:{"a":1}
//data:{"a":1}
//file:[{}]
//responseCharset: string
let md = utils.dataMd5("12345");
let md2 = utils.fileMd5("D:/sb.png");
let url = "http://192.168.0.5:8081/api/request";
let proxy = {"host": "192.168.0.5", "port": "100"};
let userAgent = "xxx";
let followRedirects = false;
let requestBody = JSON.stringify({"A": 111});
let ignoreContentType = true;
let ignoreHttpErrors = true;
let referrer = "xxx";
let header = {
"Content-Type": " application/json; charset=UTF-8",
"User-Agent": "from test",
"ddd": md,
"dd2": md2,
"imei": device.getDeviceId()
};
let cookie = {
"cookie1": "tst1",
"cookie2": "tst2"
};
let data = {
"a1": "aaa",
"pwd2": md,
"md2": md2
};
let file = [
{
"key": "file",
"fileName": "f.png",
"filePath": "D:/sb.png"
},
{
"key": "file",
"fileName": "f2.png",
"filePath": "D:/sde.png",
"contentType": "image/png"
}
];
let params = {
"url": url,
"method": "POST",
"userAgent": userAgent,
"referrer": "baidu.com",
"cookie": cookie,
"data": data,
"file": file
};
let x = http.requestEx(params);
if (x) {
logd("header=> " + x.header);
//直接取值
logd("header=> " + x.header["Location"]);
for (let d in x.header) {
logd("header key " + d + " " + x.header[d]);
}
logd("cookie=> " + x.cookie);
for (let d in x.cookie) {
logd("cookie key " + d + " " + x.cookie[d]);
}
logd("cookie=> " + x.cookie["aa"]);
logd("statusCode=> " + x.statusCode);
logd("statusMessage=> " + x.statusMessage);
logd("charset=> " + x.charset);
logd("contentType=> " + x.contentType);
logd("body=> " + x.body);
} else {
loge("无结果");
}
}

main();

http.downloadFile 下载文件

  • 下载远程文件到本地,支持断点续传
  • @param remoteUrl 远程文件URL
  • @param file 要保存到本地的文件对象
  • @param timeout 下载超时,单位是毫秒
  • @param headers – 头标志例如{"a":"11"}
  • @return true 代表成功 false代表失败
function main() {
let url = "https://imtt.dd.qq.com/16891/apk/DF4FD15AF9A9B51BA74D2710CF738EEF.apk?fsname=com.ishugui_3.9.2.3068_3923068.apk&csr=1bbd";
let x = http.downloadFile(url, "D:/ss.apk", 10 * 1000, {"User-Agent": "test"});
logd("download result-> " + x);
}

main();

http.downloadFileDefault 下载文件

  • 下载远程文件到本地,支持断点续传,默认超时时间为30秒
  • @param remoteUrl 远程文件URL
  • @param file 要保存到本地的文件对象
  • @param headers – 头标志例如{"a":"11"}
  • @return true 代表成功 false代表失败
function main() {
let url = "https://imtt.dd.qq.com/16891/apk/DF4FD15AF9A9B51BA74D2710CF738EEF.apk?fsname=com.ishugui_3.9.2.3068_3923068.apk&csr=1bbd";
let x = http.downloadFileDefault(url, "D:/ss.apk", {"User-Agent": "test"});
logd("download result-> " + x);
}

main();

http.httpGetDefault GET请求

  • Http GET 请求
  • @param url 请求的URL
  • @param timeout 超时时间 单位毫秒
  • @param headers – 头标志例如{"a":"11"}
  • @return 字符串 请求后返回的字符串
function main() {
let url = "http://192.168.0.5:8081/api/httpGet?a=1";
let x = http.httpGetDefault(url, 10 * 1000, {"User-Agent": "test"});
logd(" result-> " + x);
loge("result -> " + x);
}

main();

http.httpGet GET请求

  • Http GET 请求
  • @param url 请求的URL
  • @param params 参数Map表 例如 {"a":"11"} 这样的参数或者字符串
  • @param timeout 超时时间 单位毫秒
  • @param headers – 头标志例如{"a":"11"}
  • @return 字符串 请求后返回的字符串
function main() {
let url = "http://192.168.0.5:8081/api/httpGet?a=1";
let pa = {"b": "22"};
let x = http.httpGet(url, pa, 10 * 1000, {"User-Agent": "test"});
logd(" result-> " + x);
loge("result -> " + x);
}

main();

http.httpPost POST请求

  • Http Post 请求
  • @param url 请求的URL
  • @param params 参数,例如 {"a":"11"} 这样的参数或者字符串
  • @param files 要上传的文件,例如 {"file1":"D:/1.png"} 这样的文件参数
  • @param timeout 超时时间 单位毫秒
  • @param headers – 头标志例如{"a":"11"}
  • @return 字符串 请求后返回的字符串
function main() {
//不带文件的请求
let url = "http://192.168.0.5:8081/api/httpPost";
let pa = {"b": "我是b的值"};
let x = http.httpPost(url, pa, null, 10 * 1000, {"User-Agent": "test"});
logd(" result-> " + x);
loge("result -> " + x);
}

main();
function main() {
//带上传文件的请求
let url = "http://192.168.0.5:8081/api/httpPost";
let pa = {"b": "我是b的值"};
let files = {"file1": "D:/p.json", "file2": "D:/z.xml"};
let x = http.httpPost(url, pa, files, 10 * 1000, {"User-Agent": "test"});
logd(" result-> " + x);
loge("result -> " + x);
}

main();

http.postJSON 发送JSON

  • HTTP POST JSON数据
  • @param url 请求的URL
  • @param json json数据
  • @param timeout – 超时时间 单位毫秒
  • @param headers – 头标志例如{"a":"11"}
  • @return 字符串 请求后返回的字符串
function main() {
let url = "http://192.168.0.5:8081/api/postJSON";
let pa = {"b": "我是b的值"};
let x = http.postJSON(url, pa, 10 * 1000, {"User-Agent": "test"});
logd(" result-> " + x);
loge("result -> " + x);
}

main();

http.newWebsocket websocket通信

  • 创建一个websocket
  • @param url 要连接的地址
  • @param header 参数头
  • @param type 类库类型,1 = okhttp3, 2 = javawebsocket
  • @return {@link WebSocket } WebSocket对象
function main() {
let result = [];
//新建一个ws连接
let ws = http.newWebsocket("ws://192.168.1.76:8081/websocket/device/call?deviceNo=111", null, 2);
// 设置type=1的时候链接参数
ws.setCallTimeout(5);
ws.setReadTimeout(5);
ws.setWriteTimeout(5);
//心跳检测 建议设置为0 因为有的服务端没有ping
ws.setPingInterval(0)

//设置type=2的时候心跳检测时间
ws.setConnectionLostTimeout(5)
//设置连接打开的时候监听器
ws.onOpen(function (ws1, code, msg) {
logi("onOpen code " + code + " msg:" + msg);
})
//设置有文本信息监听器
ws.onText(function (ws1, text) {
logi(" onText " + text);
})
//设置关闭时候的监听器
ws.onClose(function (ws1, code, reason) {
logi(" onClose " + code + " reason : " + reason + " remote:");
})
ws.onError(function (ws1, msg) {
logi(" onError " + msg);
result[0] = "error";
})
// bytes 是 java的bytes数组 对象
ws.onBinary(function (ws1, bytes) {
//转成java的
logi(" onBinary " + new java.lang.String(bytes));
})

//开始连接 阻塞的
let r = ws.connect(10000);
//设置自动重连
ws.setAutoReconnect(true);
logd("connect {} rr = {}", result[0], r);

while (true) {
logd("isconnect " + ws.isConnected());
sleep(1000)
if (ws.isConnected()) {
b = ws.sendText("new Date-> " + new Date())
logd("send => " + b);
sleep(1000)
// java的字符串转字节
ws.sendBinary(new java.lang.String("test").getBytes());
} else {
//重置链接
// let reset = ws.reset();
// logd("reset {}",reset)
// if (reset) {
// logd("开始重连...");
// let rc = ws.connect(10000);
// logd("重连--> "+rc);
// }
}
}
logd("isClosed " + ws.isClosed())
sleep(1000)
//关闭连接
ws.close();
}

main();

WebSocket 对象函数

connect 同步连接

  • 开始异步连接
  • 详细代码看例子

reset 重置连接

  • 重置连接
  • @return {bool} true 代表成功 false代表失败
  • 详细代码看例子

isClosed 是否关闭

  • 是否已经关闭
  • @return true 代表已经关闭,false 未关闭
  • 详细代码看例子

isConnected 是否连接

  • 是否已经连接了
  • @return true 代表已经连接,false 未关闭
  • 详细代码看例子

close 关闭

  • 关闭链接
  • 详细代码看例子

sendText 发送文本

  • 发送文本消息
  • @param text 文本信息
  • 详细代码看例子

sendBinary 发送字节

  • 发送字节信息
  • @param bin java byte 数组对象
  • 详细代码看例子

onOpen 打开回调

  • 当连接打开的时候事件回调
  • @param callback 回调函数
  • 详细代码看例子

onText 文件回调

  • 当有文本信息发送过来的时候回调
  • @param callback 回调函数
  • 详细代码看例子

onClose 关闭回调

  • 当关闭的时候回调
  • @param callback 回调函数
  • 详细代码看例子

onError 错误回调

  • 当发生错误的时候回调
  • @param callback 回调函数
  • 详细代码看例子

onBinary 二进制消息回调

  • 当有二进制数据过来的时候回调
  • @param callback 回调函数
  • 详细代码看例子

setReadTimeout 设置读数据超时时间

  • 在创建websocket链接类型=1的时候使用
  • 设置读数据超时时间
  • @param timeout 单位是秒
  • 详细代码看例子

setWriteTimeout 设置写数据超时时间

  • 在创建websocket链接类型=1的时候使用

  • 设置写数据超时时间

  • @param timeout 单位是秒

  • 详细代码看例子

setPingInterval 设置心跳超时时间

  • 在创建websocket链接类型=1的时候使用
  • 设置心跳超时时间
  • @param timeout 单位是秒
  • 详细代码看例子

setConnectionLostTimeout 设置心跳超时时间

  • 在创建websocket链接类型=2的时候使用
  • 设置心跳超时时间
  • @param timeout 单位是秒
  • 详细代码看例子

setAutoReconnect 设置自动重连

  • 设置自动重连
  • 详细代码看例子