是否可以在 Flutter 中使用 body 发出 GET 请求?
Is it possible to make a GET request with a body in Flutter?
我做了一个 API,它根据给定的 id
通过 GET 请求从数据库中读取数据。
它获取一些数据,其中 id
等于某个整数。
我想在 Flutter 中使用 package:http/http.dart
调用此 API 但 GET 请求不允许我输入请求正文(我将在其中传递 id
) .
我用谷歌搜索了又搜索都无济于事(我可能只是用谷歌搜索了错误的东西)。我尝试将我的 API 更改为 POST 而不是 GET,这可行,但我觉得它违背了 GET 的目的。
下面是我如何使用 POST:
String url = "http://example.com/api/v1";
Map<String, String> headers = {"Content-type": "application/json"};
String json = '{"id": 1}';
Response response = await post(url, headers: headers, body: json);
但是我可以在 Flutter 中使用 GET 实现吗?
有一个 dart 包为 http 请求提供了一些帮助程序 classes。
Github : https://github.com/Ephenodrom/Dart-Basic-Utils
安装:
dependencies:
basic_utils: ^1.5.1
它也是 EZ-Flutter 合集的一部分:
Github : https://github.com/Ephenodrom/EZ-Flutter
文档:https://ez-flutter.de/docs
dependencies:
ez_flutter: ^0.2.5
对于您的情况,您不能在 GET 请求中发送正文。您必须在您调用的 url 中设置 id。
用法
Map<String, String> headers = {
"Some": "Header"
};
Map<String, String> queryParameters = {
"Some": "Parameter"
};
String url = "example.com/api/v1/something/;
String id ="100"
url = url + id;
Map<String, dynamic> reaponseBody;
try {
responseBody = await HttpUtils.getForJson(url,
queryParameters: queryParameters, headers: headers);
} catch (e) {
// Handle exception, for example if response status code != 200-299
}
// do something with the response body
补充信息:
这些都是来自 HttpUtils 的方法 class。
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);
您可以为此使用 Request
class:
final request = Request('GET', 'http://example.com/api/v1');
request.body = '{"id": 1}';
final response = request.send().stream.first;
或者,您也可以使用惯用语法,即标准过程,并在 URI 中提供您的参数:
await get('http://example.com/api/v1?id=1', headers: headers, body: json);
我做了一个 API,它根据给定的 id
通过 GET 请求从数据库中读取数据。
它获取一些数据,其中 id
等于某个整数。
我想在 Flutter 中使用 package:http/http.dart
调用此 API 但 GET 请求不允许我输入请求正文(我将在其中传递 id
) .
我用谷歌搜索了又搜索都无济于事(我可能只是用谷歌搜索了错误的东西)。我尝试将我的 API 更改为 POST 而不是 GET,这可行,但我觉得它违背了 GET 的目的。
下面是我如何使用 POST:
String url = "http://example.com/api/v1";
Map<String, String> headers = {"Content-type": "application/json"};
String json = '{"id": 1}';
Response response = await post(url, headers: headers, body: json);
但是我可以在 Flutter 中使用 GET 实现吗?
有一个 dart 包为 http 请求提供了一些帮助程序 classes。
Github : https://github.com/Ephenodrom/Dart-Basic-Utils
安装:
dependencies:
basic_utils: ^1.5.1
它也是 EZ-Flutter 合集的一部分:
Github : https://github.com/Ephenodrom/EZ-Flutter 文档:https://ez-flutter.de/docs
dependencies:
ez_flutter: ^0.2.5
对于您的情况,您不能在 GET 请求中发送正文。您必须在您调用的 url 中设置 id。 用法
Map<String, String> headers = {
"Some": "Header"
};
Map<String, String> queryParameters = {
"Some": "Parameter"
};
String url = "example.com/api/v1/something/;
String id ="100"
url = url + id;
Map<String, dynamic> reaponseBody;
try {
responseBody = await HttpUtils.getForJson(url,
queryParameters: queryParameters, headers: headers);
} catch (e) {
// Handle exception, for example if response status code != 200-299
}
// do something with the response body
补充信息:
这些都是来自 HttpUtils 的方法 class。
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);
您可以为此使用 Request
class:
final request = Request('GET', 'http://example.com/api/v1');
request.body = '{"id": 1}';
final response = request.send().stream.first;
或者,您也可以使用惯用语法,即标准过程,并在 URI 中提供您的参数:
await get('http://example.com/api/v1?id=1', headers: headers, body: json);