网络 函数
说明
- 网络模块函数主要是跟网络请求信息相关联
- 网络模块的对象前缀是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:要上传的文件,例如
{"file1":"a1.png","file2":"a2.png"}
- responseCharset: 字符串,强制设置 响应内容的编码集
- url:字符串 请求的地址
- @return Response 对象或者null
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
var md = utils.dataMd5("12345");
var md2 = utils.fileMd5("D:/sb.png");
var url = "http://192.168.0.5:8081/api/request";
var proxy = {"host": "192.168.0.5", "port": "100"};
var userAgent = "xxx";
var followRedirects = false;
var requestBody = JSON.stringify({"A": 111});
var ignoreContentType = true;
var ignoreHttpErrors = true;
var referrer = "xxx";
var header = {
"Content-Type": " application/json; charset=UTF-8",
"User-Agent": "from test",
"ddd": md,
"dd2": md2,
"imei": device.getIMEI()
};
var cookie = {
"cookie1": "tst1",
"cookie2": "tst2"
};
var data = {
"a1": "aaa",
"pwd2": md,
"md2": md2
};
var file =
{
"file1": "a.png",
"file2": "f.png"
}
var params = {
"url": url,
"method": "POST",
"userAgent": userAgent,
"referrer": "baidu.com",
"cookie": cookie,
"data": data,
"file": file
};
var x = http.request(params);
if (x) {
logd("header=" + x.header);
logd("cookie=" + 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:要上传的文件,例如
{"file1":"a1.png","file2":"a2.png"}
- responseCharset: 字符串,强制设置响应内容的编码集
- url:字符串 请求的地址
- @return Response 对象或者null
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
var md = utils.dataMd5("12345");
var md2 = utils.fileMd5("D:/sb.png");
var url = "http://192.168.0.5:8081/api/request";
var proxy = {"host": "192.168.0.5", "port": "100"};
var userAgent = "xxx";
var followRedirects = false;
var requestBody = JSON.stringify({"A": 111});
var ignoreContentType = true;
var ignoreHttpErrors = true;
var referrer = "xxx";
var header = {
"Content-Type": " application/json; charset=UTF-8",
"User-Agent": "from test",
"ddd": md,
"dd2": md2,
"imei": device.getIMEI()
};
var cookie = {
"cookie1": "tst1",
"cookie2": "tst2"
};
var data = {
"a1": "aaa",
"pwd2": md,
"md2": md2
};
var file = {
"file1": "a.png",
"file2": "b.png"
}
var params = {
"url": url,
"method": "POST",
"userAgent": userAgent,
"referrer": "baidu.com",
"cookie": cookie,
"data": data,
"file": file
};
var x = http.requestEx(params);
if (x) {
logd("header=" + x.header);
//直接取值
logd("header=" + x.header["Location"]);
for (var d in x.header) {
logd("header key " + d + " " + x.header[d]);
}
logd("cookie=" + x.cookie);
for (var 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":1}
- @return true 代表成功 false代表失败
function main() {
var url = "https://imtt.dd.qq.com/16891/apk/DF4FD15AF9A9B51BA74D2710CF738EEF.apk?fsname=com.ishugui_3.9.2.3068_3923068.apk&csr=1bbd";
var x = http.downloadFile(url, "D:/ss.apk", 10 * 1000, {"User-Agent": "test"});
logd("download result- " + x);
}
main();
http.downloadFile2 断点续传下载文件
- 下载远程文件到本地,支持断点续传
- 适配EC iOS脱机版本3.2.0+
- @param remoteUrl 远程文件URL
- @param file 要保存到本地的文件对象
- @param timeout 下载超时,单位是毫秒
- @param headers – 头标志例如
{"a":"11"}
- @return true 代表成功 false代表失败
function main() {
for (let i = 0; i < 10; i++) {
var url = "http://192.168.2.19/1.mp4";
let f = file.getSandBoxFilePath("1.mp4")
logd("download filepath: {}", f)
logd("file.exists() " + file.exists(f));
// 如果删除了文件 就会从头开始下载 不会断点续传了
//file.deleteAllFile(f)
var x = http.downloadFile2(url, f, 10 * 1000, {"User-Agent": "test"});
logd("download result- " + x);
if (x) {
let save = utils.saveVideoToAlbumPath(f)
logd("save " + save)
return
}
}
}
main();
http.httpGet GET请求
- Http GET 请求
- @param url 请求的URL
- @param params 参数Map表 例如
{"a":"11"}
这样的参数或者字符串 - @param timeout 超时时间 单位毫秒
- @param headers – 头标志例如
{"a":"11"}
- @return 字符串 请求后返回的字符串
function main() {
var url = "http://192.168.0.5:8081/api/httpGet?a=1";
var pa = {"b": "22"};
var x = http.httpGet(url, pa, 10 * 1000, {"User-Agent": "test"});
logd(" 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() {
//不带文件的请求
var url = "http://192.168.0.5:8081/api/httpPost";
var pa = {"b": "我是b的值"};
var x = http.httpPost(url, pa, null, 10 * 1000, {"User-Agent": "test"});
logd(" result- " + x);
}
main();
function main() {
//带上传文件的请求
var url = "http://192.168.0.5:8081/api/httpPost";
var pa = {"b": "我是b的值"};
var files = {"file1": "D:/p.json", "file2": "D:/z.xml"};
var x = http.httpPost(url, pa, files, 10 * 1000, {"User-Agent": "test"});
logd(" result- " + x);
}
main();
http.postJSON 发送JSON
- HTTP POST JSON数据
- @param url 请求的URL
- @param json json数据
- @param timeout – 超时时间 单位毫秒
- @param headers – 头标志例如
{"a":"11"}
- @return 字符串 请求后返回的字符串
function main() {
var url = "http://192.168.0.5:8081/api/postJSON";
var pa = {"b": "我是b的值"};
var x = http.postJSON(url, pa, 10 * 1000, {"User-Agent": "test"});
logd(" result- " + x);
loge("result - " + x);
}
main();
http.getLanIp 获取局域网IP
- 获取局域网的IP,包含IPV4和IPV6
- 适配EC 4.6.0+
- @returns
{JSON String}
function main() {
var x = http.getLanIp();
logd(" result- " + x);
}
main();
http.newWebsocket websocket通信
- 创建一个websocket
- @param url 要连接的地址
- @param header 参数头
- @return
{@link WebSocket }
WebSocket对象
function testwebsocket() {
let result = [];
//新建一个ws连接
var ws = http.newWebsocket("ws://192.168.2.13:8120/api/ws/device?deviceId=111", {"t1": "100"});
ws.setWriteTimeout(5);
//心跳检测 建议设置为5
ws.setPingInterval(5)
ws.setConnectionTimeout(5)
//设置连接打开的时候监听器
ws.onOpen(function (ws1) {
logi("onOpen ");
})
//设置有文本信息监听器
ws.onText(function (ws1, text) {
logi(" onText " + text);
})
//设置关闭时候的监听器
ws.onClose(function (ws1, reason) {
logi(" onClose " + " reason : " + reason);
})
ws.onError(function (ws1, msg) {
logi(" onError " + msg);
result[0] = "error";
})
ws.onBinary(function (ws1, bytes) {
logi(" onBinary " + (bytes));
})
//开始连接
let r = ws.connect();
//设置自动重连
ws.setAutoReconnect(true);
logd("connect {} rr = {}", result[0], r);
// 设置自定义心跳数据,发送时间是5秒一次
ws.startHeartbeatInterval(5, function () {
return "我是心跳数据"
})
// 停止心跳
//ws.stopHeartbeatInterval()
while (true) {
if (isScriptExit()) {
return
}
logd("isconnect " + ws.isConnected());
sleep(1000)
if (ws.isConnected()) {
b = ws.sendText("new Date-> " + new Date())
logd("send => " + b);
sleep(1000)
} else {
//重置链接
let reset = ws.reset();
logd("reset {}", reset)
if (reset) {
logd("开始重连...");
let rc = ws.connect();
logd("重连--> " + rc);
}
}
}
logd("isClosed " + ws.isClosed())
sleep(1000)
//关闭连接
ws.close();
}
testwebsocket()
WebSocket 对象函数
connect 开始异步连接
- 开始异步连接
- 详细代码看例子
reset 重置连接
- 重置连接
- @return
{bool}
true 代表成功 false代表失败 - 详细代码看例子
isClosed 是否关闭
- 是否已经关闭
- @return true 代表已经关闭,false 未关闭
- 详细代码看例子
isConnected 是否连接
- 是否已经连接了
- @return true 代表已经连接,false 未关闭
- 详细代码看例子
close 关闭
- 关闭链接
- 详细代码看例子
sendText 发送文本
- 发送文本消息
- @param text 文本信息
- 详细代码看例子
sendBinary 发送字节
- 发送字节信息
- @param bin swift data对象
- 详细代码看例子
onOpen 打开回调
- 当连接打开的时候事件回调
- @param callback 回调函数
- 详细代码看例子
onText 文件回调
- 当有文本信息发送过来的时候回调
- @param callback 回调函数
- 详细代码看例子
onClose 关闭回调
- 当关闭的时候回调
- @param callback 回调函数
- 详细代码看例子
onError 错误回调
- 当发生错误的时候回调
- @param callback 回调函数
- 详细代码看例子