De acuerdo con la codificación de la documentación de node.js: nulo cuando los datos binarios se envían a través de Api,
https://www.npmjs.com/package/request en este enlace a continuación se encuentra la explicación mencionada.
codificación: codificación que se usará en setEncoding de datos de respuesta. Si es nulo, el cuerpo se devuelve como un búfer. Cualquier otra cosa (incluido el valor predeterminado de undefined) se pasará como parámetro de codificación a toString() (lo que significa que esto es efectivamente utf8 por defecto).
Nota: si espera datos binarios, debe establecer la codificación: nulo.
Ahora he logrado lo mismo en flutter/dart y este parámetro de codificación no acepta nulo como aquí en node.js que han mencionado.
Quiero saber cómo hacer esta misma solicitud de publicación desde Flutter/Dart o al menos Android/Java.
var enc = AESCrypt.encrypt(key, iv, JSON.stringify(obj_j)); var output = new Buffer.from(enc, 'hex'); // Buffer function test() { console.time("XXX"); request.post({ headers: { 'content-type': 'application/json' }, //required, or webserver will ignore it application/json multipart/form-data url: 'http://192.168.29.210/deviceid/read', // webserver url encoding:null, body: output }, function (error, response, body) { if (!error && response.statusCode == 200) { console.timeEnd("XXX"); body = AESCrypt.decrypt(key, iv, body); //body is decrypted http response, can be parsed with json method fs.writeFile('input.json', body, function (err) { if (err) { return console.error(err); } }); } }); };Agregando código lo que he probado en flutter
var headers = {'Content-Type': 'application/json'}; var request = http.Request('POST', Uri.parse('http://192.168.29.210/deviceid/read')); request.body = encryptedText; request.encoding = null ; // here this null parameter is not acceptable request.encoding = Encoding.getByName("utf-8")); // only this option is available to add in flutter request.headers.addAll(headers); http.StreamedResponse response = await request.send();Incluso en post man, esta variable de codificación no está presente para establecerla.
Use el método de marco de aleteo a continuación
Future<Response> post(Uri url, {Map<String, String>? headers, Object? body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding));Cómo utilizar
final url = Uri.parse('$urlPrefix/posts'); final headers = {"Content-type": "application/json"}; final json = '{"title": "Hello", "body": "body text", "userId": 1}'; final response = await post(url, headers: headers, body: json,encoding:null); //here this null parameter is not acceptableMi código de trabajo final es
var headers = {'Content-Type': 'application/json'}; final response = await http.post( Uri.parse('http://192.168.29.210/deviceid/read'), headers: headers, body: encryptedText, encoding: null); if (response.statusCode == 200) { String res = response.body.toString(); //String data = AesEncryption().decryption(res); print('Body: ${response.body.toString()}'); } else { print(response.reasonPhrase); } print('Status code: ${response.statusCode}');