httpRequest method

Future<EasyPacket> httpRequest(
  1. String route, {
  2. Map<String, dynamic>? data,
  3. List<List<int>>? fileBytes,
  4. MediaType? mediaType,
  5. Map<String, String>? headers,
})

发起AES加密通讯的http请求

Implementation

Future<EasyPacket> httpRequest(String route, {Map<String, dynamic>? data, List<List<int>>? fileBytes, MediaType? mediaType, Map<String, String>? headers}) async {
  final requestId = _reqIdInc++;
  final requestPacket = EasyPacket.request(route: route, id: requestId, desc: DateTime.now().millisecondsSinceEpoch.toString(), data: data);
  final requestData = threadEnable
      ? await _thread!.runTask(
          taskType: _threadTaskEncrypt,
          taskData: [requestPacket, _token ?? _config.pwd, _config.binary],
        )
      : EasySecurity.encrypt(requestPacket, _token ?? _config.pwd, _config.binary);
  if (requestData == null) {
    final responsePacket = requestPacket.requestEncryptError();
    logError(['httpRequest =>', responsePacket.codeDesc, requestPacket]);
    return responsePacket;
  }
  logDebug(['httpRequest >>>>>>', requestPacket]);
  logTrace(['httpRequest =>', requestData]);
  try {
    int fieldId = 0;
    final url = Uri.parse('${_config.httpUrl}$route');
    final response = fileBytes == null || mediaType == null
        ? await http.post(url, body: requestData, headers: {'content-type': _config.binary ? 'application/octet-stream' : 'text/plain', 'easy-security-identity': _uid ?? ''}..addAll(headers ?? {}))
        : await http.Response.fromStream(await (http.MultipartRequest('POST', url)
              ..headers.addAll({'easy-security-identity': _uid ?? ''})
              ..files.add(_config.binary ? http.MultipartFile.fromBytes('data', requestData) : http.MultipartFile.fromString('data', requestData))
              ..files.addAll(fileBytes.map((bytes) => http.MultipartFile.fromBytes('file_${fieldId++}', bytes, contentType: mediaType))))
            .send());
    logTrace(['httpResponse <=', response.headers]);
    final responseBody = _config.binary ? response.bodyBytes : response.body;
    logTrace(['httpResponse <=', responseBody]);
    if (response.statusCode != 200) {
      final responsePacket = requestPacket.requestStatusCodeError(status: response.statusCode, reason: response.reasonPhrase);
      logError(['httpResponse <<<<<<', responsePacket]);
      return responsePacket;
    }
    final responseData = threadEnable
        ? await _thread!.runTask<EasyPacket>(
            taskType: _threadTaskDecrypt,
            taskData: [responseBody, _token ?? _config.pwd],
          )
        : EasySecurity.decrypt(responseBody, _token ?? _config.pwd);
    if (responseData == null) {
      final responsePacket = requestPacket.requestDecryptError();
      logError(['httpResponse <<<<<<', responsePacket]);
      return responsePacket;
    }
    if (responseData.ok) {
      logDebug(['httpResponse <<<<<<', responseData]);
    } else {
      logError(['httpResponse <<<<<<', responseData]);
    }
    return responseData;
  } catch (error, stack) {
    final responsePacket = requestPacket.requestExceptionError(error: error);
    logError(['httpResponse <<<<<<', responsePacket, error, '\n', stack]);
    return responsePacket;
  }
}