es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
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"
</http.response>

Tags:  , , , ,

Answer

  1. Avatar for 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:

    final response = await http.post(uri, headers: {
      HttpHeaders.contentTypeHeader: 'application/json',
      HttpHeaders.acceptHeader: 'application/json',
      'Authorization': 'Bearer xxxtokenxxx' // reemplazar con el valor real del token
    });
    

    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 clave issue en el mapa de queryParameters 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ón jsonEncode:

    final queryParameters = {
      "action": "opened",
      "issue": jsonEncode({"name": "Hello", "number": 1347}),
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {"login": "octocat", "id": 1}
    };
    

    Finalmente, puedes usar curl para probar el punto final de la API y asegurarte de que el token se pase correctamente en las cabeceras:

    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" \
      -H "Authorization: Bearer xxxtokenxxx"
    

Comments are closed.