web-dev-qa-db-fra.com

Comment ajouter des paramètres de requête à une requête http Dart?

Comment ajouter correctement des paramètres de requête à une requête Dart http get? Je n'ai pas pu obtenir une réponse correcte de ma demande lorsque j'essayais d'ajouter le '? Param1 = one & param2 = two' à mon URL, mais cela fonctionne correctement dans Postman. Voici l'essentiel de mon code:

    final String url = "https://www.myurl.com/api/v1/test/";
    String workingStringInPostman = "https://www.myurl.com/api/v1/test/123/?param1=one&param2=two";

    Map<String, String> qParams = {
     'param1': 'one',
     'param2': 'two',
    };


   var res = await http
      .get(Uri.encodeFull("$url${widget.pk}/"),
      headers: {HttpHeaders.authorizationHeader: "Token $token", 
        HttpHeaders.contentTypeHeader: "application/json"},
);

$ {Widget.pk} est simplement une valeur entière en cours de transmission (Voir la valeur 123 dans la variable workingStringInPostman.

Le qParams est là pour la connivence, dans le cas où un paramètre Uri est nécessaire.

Un exemple de code serait le bienvenu.

13
Peter Birdsall

Vous aurez envie de construire un Uri et de l'utiliser pour la requête. Quelque chose comme

var queryParameters = {
  'param1': 'one',
  'param2': 'two',
};
var uri =
    Uri.https('www.myurl.com', '/api/v1/test/${widget.pk}', queryParameters);
var response = await http.get(uri, headers: {
  HttpHeaders.authorizationHeader: 'Token $token',
  HttpHeaders.contentTypeHeader: 'application/json',
});

Voir https://api.dartlang.org/stable/2.0.0/Dart-core/Uri/Uri.https.html

32
Nate Bosch

Il existe un paquet Dart qui fournit des classes auxiliaires pour les requêtes http.

BasicUtils: https://github.com/Ephenodrom/Dart-Basic-Utils

Installez-le avec:

dependencies:
  basic_utils: ^1.4.0

Usage

Vous pouvez ajouter une carte des en-têtes et des paramètres de requête à chaque demande. Voir l'exemple:

// Define some headers and query parameters
Map<String, String> headers = {
  "Accept": "application/json"
};
Map<String, String> queryParameters = {
  "foo": "bar"
};

// Body
String body = "{ 'some':'json'}";

// Send request
Map<String, dynamic> responseData = await HttpUtils.postForJson("api.com/dosomething", body,
      headers: headers, queryParameters: queryParameters);

Information additionnelle :

Ce sont toutes des méthodes de la classe HttpUtils.

Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
0
Ephenodrom