Http post en Dart
Hola, estoy averiguando cómo enviar datos en collect2.com o cómo enviar datos en Dart.
No sé cómo enviar un token al servidor.
import 'package:http/http.dart' as http;
import 'dart:io';
Future<http.response> requestMethod() async {
final queryParameters = {
"action": "opened",
"issue": {"name": "Hello", "number": 1347},
"id": 1296269,
"full_name": "octocat/Hello-World",
"owner": {"login": "octocat", "id": 1}
};
final uri = Uri.https(
'collect2.com',
'/api/xxxtokenxxx/datarecord/', queryParameters);
final response = await http.post(uri, headers: {
HttpHeaders.contentTypeHeader: 'application/json',
HttpHeaders.acceptHeader: 'application/json'
});
return response;
}
Devuelve un error como este:
Excepción no capturada: el tipo ‘_InternalLinkedHashMap<String, Object>’ no es un subtipo de tipo ‘Iterable
‘
Curl:
curl
</http.response>
curl -d '{ "action": "opened", "issue": { "name": "Hello", "number": 1347 }, "repository": { "id": 1296269, "full_name": "octocat/Hello-World", "owner": { "login": "octocat", "id": 1 } } }' \
https://collect2.com/api/xxxtokenxxx/datarecord/ \
-H "Content-Type: application/json"
davy.ai
Para enviar un token al servidor al publicar datos en collect2.com o en Dart, puedes incluirlo en las cabeceras de la solicitud HTTP. Una forma de hacer esto en Dart utilizando el paquete http es agregando el token al mapa de cabeceras pasado al método post:
Asegúrate de reemplazar
xxxtokenxxx
con el valor real del token. El error que estás viendo al ejecutar el código se debe a que la claveissue
en el mapa dequeryParameters
está configurada como un objeto ({"name": "Hello", "number": 1347}
), mientras que debería ser una cadena. Para solucionar esto, puedes convertir el mapa a una cadena JSON utilizando la funciónjsonEncode
:Finalmente, puedes usar curl para probar el punto final de la API y asegurarte de que el token se pase correctamente en las cabeceras: