http 简介
http 是一个 http 网络请求框架, 由 dart team 出品
与HttpClient
不是一回事,至于和 dio 孰优孰劣自己见仁见智吧
通过pub下载
基础的 api
http 协议中有多种 METHOD,当然最常见的就是 GET POST,
因为最近几年 restful 协议的频繁使用,使得 PUT,DELETE,PATCH 方法也有了一定的使用率
基础使用
import 'package:http/http.dart' as http;
void get(String url) async {
http.Response response = await http.get(url);
// 其他的返回值都是一样的
http.post(url);
http.put(url);
http.patch(url);
http.delete(url);
http.head(url);
}
增加请求头
void headerDemo(String url, Map<String, String> headers) async {
http.get(url, headers: headers);
// 其他的方法相同
}
post 常见的请求方式
常见的请求方式有如下几种(来自于postman)
或者使用 postman 查看也可以帮助加深理解
form-data
模拟表单上传
Future<String> postFormData(String url, Map<String, String> headers,
Map<String, String> params, Map<String, File> files) async {
Completer<String> completer = Completer();
var request = http.MultipartRequest("POST", Uri.parse(url));
request.fields.addAll(params);
files.forEach((k, v) {
var partFile = http.MultipartFile(
k,
v.readAsBytes().asStream(),
v.lengthSync(),
);
request.files.add(partFile);
});
var ioClient = http.IOClient();
var response = await ioClient.send(request);
List<int> responseBody = [];
response.stream.listen((data) {
responseBody.addAll(data);
}, onDone: () {
var string = String.fromCharCodes(responseBody);
completer.complete(string);
}, onError: (err) {
completer.completeError(err);
});
return completer.future;
}
x-www-form-urlencoded
这个也是
Future<http.StreamedResponse> xWwwFormUrlencoded(
String url, Map<String, String> params) {
var request = http.Request("POST", Uri.parse(url));
request.bodyFields = params;
return request.send();
}
这里只需要简单的使用 bodyFild 设置 params 即可
参考源码可知
当 contentType 为空的时候会自动设置 contentType 为x-www-form-urlencoded
raw(文本)
这里有多种选择的原因是因为:有的时候部分第三方接口可能支持xml/json/protobuf等多种交互方案
流(binary 二进制)
其实目前很多的 api 接口对于 contentType 并不敏感,单纯的接收一个数据/图片或其他的信息,然后返回值
Future<http.StreamedResponse> streamRequest(
String url, List<int> streamContent) {
var request = http.StreamedRequest("POST", Uri.parse(url));
request.sink.add(streamContent);
return request.send();
}
本篇讲解了 http 的库的基本用法,理论上能满足大部分的需求了, 下一篇写几个可能会遇到也可能遇不到的写法