HTTPを実行する方法POSTコンソールのDartアプリケーションを使用する(Dart:io
を使用する、またはpackage:http
ライブラリを使用する場合があります。私はそのようなことをします:
import 'package:http/http.Dart' as http;
import 'Dart:io';
http.post(
url,
headers: {HttpHeaders.CONTENT_TYPE: "application/json"},
body: {"foo": "bar"})
.then((response) {
print("Response status: ${response.statusCode}");
print("Response body: ${response.body}");
}).catchError((err) {
print(err);
});
しかし、次のエラーが発生します:
Bad state: Cannot set the body fields of a Request with content-type "application/json".
http.Dart
から:
/// [body] sets the body of the request. It can be a [String], a [List<int>] or /// a [Map<String, String>]. If it's a String, it's encoded using [encoding] and /// used as the body of the request. The content-type of the request will /// default to "text/plain".
それで、JSON本体を自分で生成してください( JSON.encode
from Dart:convert を使用)。
これは完全な例です。リクエストの本文をJSONに変換するには、json.encode(...)
を使用する必要があります。
import 'package:http/http.Dart' as http;
import 'Dart:convert';
import 'Dart:io';
var url = "https://someurl/here";
var body = json.encode({"foo": "bar"});
Map headers = {
'Content-type' : 'application/json',
'Accept': 'application/json',
};
final response =
http.post(url, body: body, headers: headers);
final responseJson = json.decode(response.body);
print(responseJson);
一般に、リクエストにはFuture
を使用して、次のようなことを試すことをお勧めします
import 'package:http/http.Dart' as http;
import 'Dart:convert';
import 'Dart:io';
Future<http.Response> requestMethod() async {
var url = "https://someurl/here";
var body = json.encode({"foo": "bar"});
Map<String,String> headers = {
'Content-type' : 'application/json',
'Accept': 'application/json',
};
final response =
await http.post(url, body: body, headers: headers);
final responseJson = json.decode(response.body);
print(responseJson);
return response;
}
構文の唯一の違いは、async
およびawait
キーワードです。