Dart IO库中提供了用于发起Http请求的一些类,可以直接使用HttpClient
来发起请求。使用HttpClient
发起请求分为五步:
1、创建一个HttpClient
:
HttpClient httpClient = HttpClient();
2、打开Http连接,设置请求头:
HttpClientRequest request = await httpClient.getUrl(uri);
可以使用任意Http Method,如httpClient.post(...)
、httpClient.delete(...)
等。如果包含Query参数,可以在构建uri时添加,如:
Uri uri = Uri(scheme: "https", host: "flutterchina.club", queryParameters: {
"xx":"xx",
"yy":"dd"
});
通过HttpClientRequest
可以设置请求header,如:
request.headers.add("user-agent", "test");
如果是post或put等可以携带请求体方法,可以通过HttpClientRequest对象发送请求体,如:
String payload="...";
request.add(utf8.encode(payload));
//request.addStream(_inputStream); //可以直接添加输入流
3、等待连接服务器:
HttpClientResponse response = await request.close();
这一步完成后,请求信息就已经发送给服务器了,返回一个HttpClientResponse
对象,它包含响应头(header)和响应流(响应体的Stream),接下来就可以通过读取响应流来获取响应内容。
4、读取响应内容:
String responseBody = await response.transform(utf8.decoder).join();
通过读取响应流来获取服务器返回的数据,在读取时我们可以设置编码格式,这里是utf8。
5、请求结束,关闭HttpClient
:
httpClient.close();
关闭client后,通过该client发起的所有请求都会终止。