flutter http发送post请求 头application/x-www-form-urlencoded body为json
时间: 2024-10-18 08:24:17 浏览: 34
在 Flutter 中,如果你想通过 HTTP 发送一个 POST 请求,内容类型设置为 `application/x-www-form-urlencoded` 并携带 JSON 数据作为 Body,你需要使用 `http` 包提供的 `Client.post` 方法。首先,确保你已添加了 `http` 插件:
```dart
dependencies:
http: ^0.13.3
```
然后,在代码中创建一个 `Future` 来发送请求:
```dart
import 'package:http/http.dart' as http;
Future<void> sendPostRequest(String url, dynamic jsonData) async {
final Uri fullUrl = Uri.parse(url);
var headers = <String, String>{
'Content-Type': 'application/x-www-form-urlencoded',
};
// 将 JSON 转换成查询参数字符串
final Map<String, String> encodedData = json.encode(jsonData).replaceAll(RegExp(r'"'), '');
final String queryString = encodedData.toString();
try {
final response = await http.post(
fullUrl,
headers: headers,
encoding: Encoding.getByName('utf8'),
body: queryString,
);
if (response.statusCode == 200) {
print('Response: ${response.body}');
} else {
print('Error: ${response.statusCode}');
}
} on Exception catch (e) {
print('An error occurred: $e');
}
}
```
在这个例子中,`jsonData` 参数应该是一个可以序列化的 Dart 对象(如 `{key: value}` 格式的字典)。调用这个函数时,传入你要发送的 URL 和 JSON 数据。
阅读全文