前言
本篇介绍Flutter中网络请求相关api的使用,Flutter在Flutter engine中提供了一个sky_engine
开发工具包,其包含了一个_http
的库,该库中有封装的http请求相关的各种操作类。本文我们将介绍_http
相关操作类的使用和基于_http
封装的三方dio网络库的使用。
自带网络库_http
_http
库中的http.dart
文件中封装的HttpClient
类是我们常用的网络请求操作类,该类是一个抽象类,其具体操作由http_impl.dart
文件中_HttpClient
类实现,该类中封装了各种http请求的方法,包括get
、post
、put
、delete
、patch
和head
等请求。
get
和post
请求方法是我们常用的两种方法,通过下面的例子看下其使用方法。
_getHttpData() async {
var httpClient = new HttpClient();
//为charles抓包设置代理,为什么在代码中设置?请参考上篇文章。
httpClient.findProxy = (url) {
return HttpClient.findProxyFromEnvironment(url, environment: {"http_proxy": 'http://192.168.124.94:8888',});
};
//请求参数设置
Map<String, String> queryParameters = {'format': '2', 'key': '939e592487c33b12c509f757500888b5', 'lon': '116.39277', 'lat': '39.933748'};
var uri = Uri.http('v.juhe.cn', '/weather/geo', queryParameters);
var request = await httpClient.getUrl(uri);
//下面一行是post请求
//var request = await httpClient.postUrl(uri);
var response = await request.close();
if (response.statusCode == 200) {
print('请求成功');
var responseBody = await response.transform(utf8.decoder).join();
print('responseBody = $responseBody');
} else {
print('请求失败');
}
}
以上代码中httpClient.getUrl(uri)
方法即是根据uri发起get请求,post请求用法和get请求只是调用方法不同,包括参数设置等其他用法都一样。请求抓包结果如下:
- get请求
- post请求
请求成功之后以上代码输出结果如下:
I/flutter (19183): 请求成功
I/flutter (19183): responseBody={"resultcode":"200","reason":"查询成功","result":{"sk":{"temp":"8","wind_direction":"西南风","wind_strength":"2级","humidity":"51%","time":"21:54"},"today":{"temperature":"1℃~15℃","weather":"晴","weather_id":{"fa":"00","fb":"00"},"wind":"南风微风","week":"星期五","city":"北京","date_y":"2019年03月01日","dressing_index":"较冷","dressing_advice":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。","uv_index":"中等","comfort_index":"","wash_index":"较适宜","travel_index":"较不宜","exercise_index":"较不宜","drying_index":""},"future":[{"temperature":"1℃~15℃","weather":"晴","weather_id":{"fa":"00","fb":"00"},"wind":"南风微风","week":"星期五","date":"20190301"},{"temperature":"3℃~15℃","weather":"霾","weather_id":{"fa":"53","fb":"53"},"wind":"西南风微风","week":"星期六","date":"20190302"},{"temperature":"3℃~15℃","weather":"霾转晴","weather_id":{"fa":"53","fb":"00"},"wind":"西南