更新记录
1.0.2(2024-11-05)
- 修复高版本HB只回调一次的问题
1.0.1(2024-08-12)
- 增加cookie支持
1.0.0(2024-08-09)
- get/post等多种请求方式都支持下载文件
- 支持多文件上传/下载
- 私有自定义证书校验
- 支持get/post/put/delete/connect/head/options/patch/query/trace等多种请求方式
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.6.8,Android:4.4,iOS:10,HarmonyNext:不确定 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
网络请求getpost等下载文件,私有证书校验
优势:
- get/post等多种请求方式都支持下载文件
- 支持多文件上传/下载
- 私有自定义证书校验
- 支持get/post/put/delete/connect/head/options/patch/query/trace等多种请求方式
快速接入
- 拷贝demo示例里的AndroidManifest.xml到项目根目录
- 集成插件步骤请参考https://www.cnblogs.com/wenrisheng/p/18323027
接口
import {
UTSNetwork
} from "@/uni_modules/wrs-uts-network"
- 接口请求
let params = {}
params.url = "https://wwww.xxx/aaa/aaa"
params.method = "GET"
params.data = {account:"pwd",pwd: "121", home: ["111"]}
params.header = {
"Authorization": "Bearer 7b898771-d086-4c46-b7d9-1ece9f6a6199"
}
params.timeout = 5
params.connectTimeout = 2
params.readTimeout = 5
params.writeTimeout = 5
params.dataType = "json"
params.ignoreHttpsVerify = true
let completeHandle = (resp) => {
// 返回的数据,Object/String/ArrayBuffer
let data = resp.data
if(data) { // 接口请求成功
// 响应头
let header = resp.header
// HTTP 状态码
let statusCode = resp.statusCode
} else { // 接口请求失败
let error = resp.error
}
this.showMsg("resp:" + JSON.stringify(resp))
}
UTSNetwork.request(params, completeHandle)
params属性字段:
-
url string类型,接口地址
-
method string类型,请求方法,支持GET、POST、DELETE、OPTIONS、PUT、PATCH、HEAD、QUERY、CONNECT、TRACE
-
data object/Array类型,参数,可选,可以是对象或数组
-
header object类型,请求头,可选
-
timeout 超时时间,可选,仅支持iOS
-
connectTimeout 连接超时时间,仅支持Android
-
readTimeout 读数据超时时间,可选,仅支持Android
-
writeTimeout 写数据超时时间,可选,仅支持Android
-
dataType string类型,如果设为 json,会对返回的数据进行一次 JSON.parse,非json不会进行 JSON.parse,可选
-
ignoreHttpsVerify boolean类型,是否忽略Https证书校验,一般用于私有证书,可选,
-
cookies array类型,请求数据的cookie,响应数据的cookie从响应头的Set-Cookie里面获取,如:
params.cookies = [
{
name: "account",
value: "wrs",
domain: "172.16.11.23",
path: "/"
}
]
- httpsCer objcet类型,https证书校验,支持cer证书文件或证书字符串,一般用于私有证书,可选
证书获取方式: 用Chrome浏览器打开连接,点击地址栏左边的"不安全"按钮弹出证书信息,点击无效证书->详细信息->导出,一般导出的都是pem格式,使用命令
openssl x509 -in cer.pem -inform PEM -out cer.cer -outform DER
将pem格式转换成cer格式,接口参数使用cer格式的证书,将pem格式的证书使用HBuilderX打开即可获取证书字符串内容
如:
// 第一种:证书文件
params.httpsCer = {
type: "file", // 文件类型,value值是cer证书的绝对地址
value: plus.io.convertLocalFileSystemURL("_www/static/cer.cer")
}
// 第二种:证书字符串
params.httpsCer = {
type: "string", // 字符串类型,value值是cer证书字符串
value: `-----BEGIN CERTIFICATE-----
MIIDazCCAlOgAwIBAgIUHnAowRXnRNGbDV/PRnfx52tPObkwDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA4MDgwMjQ5MDVaFw0yNTA4
MDgwMjQ5MDVaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCwXACiypYBZEZp5gWR1mk3Bt9cu9g5XO8nJNo//Cl0
Ci6CDN3tpK6j7uoQb/RtrzHESO2POXFglBtE9ST6zsBA+O5582yhrr4YpMhHtIxk
tk12hiHL6y8Z1OQTgrKFSrx9g84HSasJEPjALxgMOzRQP8DtFwGqHEoRB3KpX5f/
ZzADojhMznPEpkUOYV+WdiQw4s0GL4UZOgOGYkf8vI38r9afTellpI+t6m7+fpQy
6fbcnMeppFCYhwxilN6l0wxjStz4r2X4Aw9EVsdyw9QBYbyGIVkHkcPRqrVOXmRz
yh/+TozrpZyxkYIc9nE2AUQ1yPNe2LbNiViQa/AJhYvpAgMBAAGjUzBRMB0GA1Ud
DgQWBBRgyKsycZ/V96snUIfptYE1/ekuozAfBgNVHSMEGDAWgBRgyKsycZ/V96sn
UIfptYE1/ekuozAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQA8
8as8JjVcMr8RmgPco4MZ4PrORbhpaChiuGrkXyN5cNcLgHjH/+Le5A/f6b9MKuHQ
dKBoSyqpJy/Ef6AM4Bvdr0aSUDesHjdLkEu6VfAFYdAZnCNqq09xR6zADtnC+KvE
Lxm3U5bfIiLFkVrckJi3EJkuNf1Acq/M/QDyJ3dByaJpqoiXwhCcJeF1vGYy4NRp
HVH4QrvJxLhnBSuyLXb9QfyUzTbrlsYIZjWgyn3uG8uR94WnezEMhjYOTjsCyv2v
2NcjE1zv6BdrM3PBEIMHE+PRgER7itnYMhkRSuZayKdGqYfuuH6qmmFOGckvzclQ
voqmSl76Z8CHZCdFWkt5
-----END CERTIFICATE-----`
}
- 下载文件 主要参数有params.fileDir、params.fileName、progressHandle,其他参数参考UTSNetwork.request()接口
let params = {}
params.url = this.host + "/download"
params.method = "GET"
params.data = {"isAll":false,"ids":["111"],"needText":true}
params.header = {
"Authorization": "Bearer 7b898771-d086-4c46-b7d9-1ece9f6a6199"
}
params.timeout = 5
// 设置下载文件保存路径,可选,不传的话或保存到app的零时缓存目录里,一般都建议传保存路径
params.fileDir = plus.io.convertLocalFileSystemURL("_download/file")
// 下载文件名称,可选,不传的话会从响应头的Content-Disposition里获取或者从url里获取
params.fileName = "aa.txt"
let progressHandle = (progess) => {
console.log("progess:" + progess)
}
let completeHandle = (resp) => {
console.log("resp:" + JSON.stringify(resp))
let tempFilePath = resp.tempFilePath
if (tempFilePath) {
this.showMsg("下载成功:" + tempFilePath)
} else {
this.showMsg("下载失败")
}
}
UTSNetwork.downloadFile(params, progressHandle, completeHandle)
- 上传文件 主要参数有params.files、params.fileName、progressHandle,其他参数参考UTSNetwork.request()接口
let params = {}
params.url = this.host + "/upload"
params.method = "POST"
params.files = [ // 多文件同时上传
{
name: "file",
uri: plus.io.convertLocalFileSystemURL("_www/static/logo.png")
}
]
// 单文件上传
params.name = "file"
params.filePath = plus.io.convertLocalFileSystemURL("_www/static/logo.png")
// 其他参数
params.formData = {"name":"wrs"}
params.header = {
"Authorization": "Bearer 7b898771-d086-4c46-b7d9-1ece9f6a6199"
}
params.timeout = 5
let progressHandle = (progess) => {
console.log("progess:" + progess)
}
let completeHandle = (resp) => {
console.log("resp:" + JSON.stringify(resp))
}
UTSNetwork.uploadFile(params, progressHandle, completeHandle)