web-dev-qa-db-ja.com

Dart httpリクエストにクエリパラメータを追加するにはどうすればよいですか?

クエリパラメータをDart http getリクエストに正しく追加するにはどうすればよいですか? '?param1 = one&param2 = two'をURLに追加しようとすると、リクエストに正しく応答することができませんでしたが、Postmanでは正しく動作します。コードの要点は次のとおりです。

    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}は単に渡される整数値です(workingStringInPostman変数の値123を参照してください)。

Uriパラメーターが必要な場合に備えて、qParamsがあります。

コード例を歓迎します。

13
Peter Birdsall

Uriを作成し、それをリクエストに使用する必要があります。何かのようなもの

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',
});

https://api.dartlang.org/stable/2.0.0/Dart-core/Uri/Uri.https.html を参照してください

32
Nate Bosch

Httpリクエストのヘルパークラスを提供するDartパッケージがあります。

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

以下でインストールします:

dependencies:
  basic_utils: ^1.4.0

使用法

各リクエストにヘッダーとクエリパラメータのマップを追加できます。例を参照してください:

// 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);

追加情報 :

これらはすべて、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