Si te encuentras con algún detalle que no comprendes puedes comentarlo y te ayudaremos lo mas rápido que podamos.
¡Esto funciona!
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
Future postRequest () async
var url ='https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
Map data =
'apikey': '12345678901234567890'
//encode Map to JSON
var body = json.encode(data);
var response = await http.post(url,
headers: "Content-Type": "application/json",
body: body
);
print("$response.statusCode");
print("$response.body");
return response;
OK, finalmente tenemos una respuesta…
Estás especificando correctamente headers: "Content-Type": "application/json",
para establecer su tipo de contenido. Debajo del capó, ya sea el paquete http
o el nivel inferior dart:io HttpClient
está cambiando esto a application/json; charset=utf-8
. Sin embargo, la aplicación web de su servidor obviamente no espera el sufijo.
Para probar esto lo probé en Java, con las dos versiones
conn.setRequestProperty("content-type", "application/json; charset=utf-8"); // fails
conn.setRequestProperty("content-type", "application/json"); // works
¿Puede ponerse en contacto con el propietario de la aplicación web para explicar su error? No puedo ver dónde Dart está agregando el sufijo, pero lo miraré más tarde.
EDITAR
La investigación posterior muestra que es el http
paquete que, mientras hace mucho del trabajo duro por usted, está agregando el sufijo que no le gusta a su servidor. Si no puede hacer que arreglen el servidor, puede pasar por alto http
y usa el dart:io HttpClient
directamente. Terminas con un poco de repetitivo que normalmente es manejado por ti por http
.
Ejemplo de trabajo a continuación:
import 'dart:convert';
import 'dart:io';
import 'dart:async';
main() async
String url =
'https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
Map map =
'data': 'apikey': '12345678901234567890',
;
print(await apiRequest(url, map));
Future apiRequest(String url, Map jsonMap) async
HttpClient httpClient = new HttpClient();
HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
request.headers.set('content-type', 'application/json');
request.add(utf8.encode(json.encode(jsonMap)));
HttpClientResponse response = await request.close();
// todo - you should check the response.statusCode
String reply = await response.transform(utf8.decoder).join();
httpClient.close();
return reply;
Dependiendo de su caso de uso, puede ser más eficiente reutilizar HttpClient, en lugar de seguir creando uno nuevo para cada solicitud. Todo: agregue un poco de manejo de errores 😉
Esto también funcionaría:
import 'package:http/http.dart' as http;
sendRequest() async
Map data =
'apikey': '12345678901234567890'
;
var url = 'https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
http.post(url, body: data)
.then((response)
print("Response status: $response.statusCode");
print("Response body: $response.body");
);
Comentarios y puntuaciones del tutorial
Nos puedes añadir valor a nuestro contenido asistiendo con tu veteranía en las aclaraciones.