Cómo realizar una solicitud HTTP POST con encabezado y cuerpo de tipo de codificación de URL en Flutter/Dart
He estado tratando de hacer una petición POST a un punto final que requiere que tanto el encabezado como el cuerpo de la solicitud estén codificados, sin embargo, hasta ahora las respuestas que he recibido son errores 400. La única forma en la que he logrado que la petición funcione es con una petición curl y Thunder client en VSCode. A continuación se muestra el cuerpo de mi solicitud. Cualquier tipo de ayuda sería apreciada, gracias.
Con el paquete http de flutter:
Response response = await post(
Uri.parse(URL),
headers: {
'Authorization': 'Basic ${base64Encode(utf8.encode('$ID:$SECRET'))}',
'Content-Type': 'application/x-www-form-urlencoded',
},
encoding: Encoding.getByName('utf-8'),
body: {
'grant_type': 'refresh_token',
'refresh_token': refreshToken,
'redirect_uri': redirectUri,
}
);
Error:
Con el paquete Dio de flutter:
Dio.Dio dio = Dio.Dio();
Dio.Response response = await dio.post(
URL,
data: {
'grant_type': 'refresh_token',
'refresh_token': refreshToken,
'redirect_uri':
redirectUri,
},
options:
Dio.Options(contentType: Dio.Headers.formUrlEncodedContentType, headers: <string, string="">{'Authorization': 'Basic ${base64Encode(utf8.encode('$ID:$SECRET'))}'}));
Error:</string,>
davy.ai
Parece que estás teniendo un error 400 al intentar hacer una solicitud POST a un punto final que requiere que tanto el encabezado como el cuerpo de la solicitud estén codificados. Los mensajes de error indican que la solicitud está malformada.
En tu primer fragmento de código, estás usando el paquete http de Flutter. Los encabezados y el cuerpo están codificados correctamente. Puede ser que el servidor no esté aceptando el formato de la solicitud. Podrías intentar codificar el cuerpo como una cadena de consulta en lugar de pares de clave-valor. Un ejemplo de esto podría ser:
En tu segundo fragmento de código, estás usando el paquete Dio de Flutter. Las opciones parecen estar configuradas correctamente, pero el tipo de contenido no se está estableciendo para la solicitud. Podrías intentar quitar el tipo de contenido de los encabezados y agregarlo a las opciones en su lugar. Un ejemplo de esto podría ser:
Prueba estos cambios y ve si funcionan. Si no, podría haber un problema con la configuración del servidor.