// 添加公共请求头
CSIIHttpUtils.getInstance().addPublicHeader("key", "value");
// 需要上送的请求参数
Map<String,String> params = new HashMap<>();
params.put(key, value);
// 获取请求地址(以http://127.0.0.1开头的url)
// 入参path路径是类似相对路径"/xxx/xxx.png" 或者 "/xxx/xxx.do"
String url = Engine.getMappedUrl("path 路径");
// 此处以post请求为例,get请求不需要params
CSIIHttpUtils.getInstance().requestPostString(url, params, new HttpResultCallback() {
@Override
public void onResponse(Object response) {
}
@Override
public void onException(int code, Throwable e) {
}
});
接口分为两种方式:
1、通过resourceApi接口,发送请求。
2、通过request对象发送请求。
参数:
url - 请求地址
method - 请求方法,传入"GET"或"POST"
body - 请求体
header - 请求头信息
needRedirect - 是否需要重定向结果:
返回ApiResponse对象,从该对象中获取响应的信息
获取ServiceWorker对象,用于创建Request对象.
newRequest(String url,String method)
创建Request对象参数:
url - 请求地址
method - 请求方法结果:
返回ApiResponse对象.
Request为MADP内的请求对象,调用该对象的相应方法实现请求的发送.
setHeader(String key,String value)
用于设置请求头,set方法会将value
覆盖整个key
字段参数:
key - 请求头字段
value - 请求头的值addHeader(String key,String value)
用于设置请求头,add方法在header原有基础上,添加value
,不会对key
的字段进行覆盖.参数:
key - 请求头字段
value - 请求头的值writeField(String key,String value)
填写表单,将value
值,填写入key
字段参数:
key - 表头字段
value - 表单数据writeFormFile(String key,String fileName,byte[] data)
将文件填写进入表单参数:
key - 表头字段
fileName - 文件名称
data - 文件数据send(byte[] data)
发送请求,若传入host地址为127.0.0.1则走madp内部的central配置,根据映射去进行报文加密,否则不对报文进行加密直接发送请求(在后管中配置的超时时间、ca绑定等依然有效);需要注意的是当调用writeFormFile或writeField方法时,发送表单数据,data不生效,传null即可,若不进行表单数据传输,可直接将body数据传入参数:
data - 请求体数据结果:
返回ApiResponse对象,从该对象中获取响应的信息.
ApiResponse为MADP内的响应对象,调用该对象的相应方法获取对应的值.
String getCode()
获取状态码.String getHeader()
获取响应头;响应头会以json串的形式返回.String headerGet(String key)
获取响应中header的单个值.byte[] getBody()
获取响应体.String string()
将响应的body转为string返回.
Request对象、ServiceWorker对象从2021-06的交付版本开始支持。
// 文件上传参考代码
String path1 = getFilesDir() + File.separator + "test1.jpg";
String path2 = getFilesDir() + File.separator + "test2.jpg";
ArrayList<String> pathList = new ArrayList<>();
pathList.add(path1);
pathList.add(path2);
ServiceWorker worker = Engine.getServiceWorker();
// 创建请求,newRequest(String url, String method) url-请求地址,method-请求方式
Request request = worker.newRequest("http://10.1.1.123:10000/upload", "POST");
for (int i = 0; i < pathList.size(); i++) {
File file = new File(pathList.get(i));
// 以表单形式上传文件,writeFormFile(String field,String fileName,byte[] data) field-表单key,fileName-文件名,data-文件字节数组; 如需提交表单可调用writeField(String key,String value) key-表单key,value-表单数据
request.writeFormFile("file" + i, file.getName(), file2byte(file));
}
/**
* 将文件转换成byte数组
* @return
*/
private byte[] file2byte(File tradeFile) {
byte[] buffer = null;
try {
FileInputStream fis = new FileInputStream(tradeFile);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
以下是最完整的初始化的方式,其中有一个参数usePortService即代表请求方式,true代表使用端口方式发请求,false代表使用接口方式发请求。端口和接口最直接的区别是端口方式发请求会走代理,而接口方式发请求是直接向服务器请求数据,建议使用接口方式。
/**
* @param app
* @param isOpenLog 日志开关
* @param openCockroach bandage开关
* @param usePortService 端口开关 true代表端口,false代表接口
* @param launchModel 是否同步启动
* @param httpProxy 代理
* @param grayFlag 灰度
* @param callback 回调
*/
Engine.initEnvironment(this, true, true, false, MADConfig.LaunchModel.SYNC, "", 0, new Engine.InitEnvCallback() {
@Override
public void doInitFinish() {
}
});