http请求的两种方式

Http协议通常用于前后端的数据交互;flutter请求网络分为两种方式(一)http请求;(二)httpClient请求
http请求首先在pubspec.yaml中引入依赖,然后导入import导入http

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(MyApp());

//MyApp不需要做状态处理,所以此组件继承StatelessWidget即可
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //此组件是整个应用的主组件
    return new MaterialApp(
      title: 'http请求示例',
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('http请求示例'),
        ),
        body: new Center(
          child: new RaisedButton(
            onPressed: () {
              //指定url并发起请求
              const url = 'https://httpbin.org/';
              //向https://httpbin.org/发起get请求
              http.get(url).then((response) {
                print("状态: ${response.statusCode}");
                print("正文:${response.body}");
              });
            },
            child: new Text('发起http请求'),
          ),
        ),
      ),
    );
  }
}

打印出的http请求信息为


http请求的两种方式_第1张图片
http.png

2.httpClient请求方式

import 'package:flutter/material.dart';
import 'dart:convert';
import 'dart:io';

void main() => runApp(MyApp());

//MyApp不需要做状态处理,所以此组件继承StatelessWidget即可
class MyApp extends StatelessWidget {
  //获取天气数据
  void getWeatherData() async {
    try {
      //实例化一个httpClient对象
      HttpClient httpClient = new HttpClient();
      //发起请求
      HttpClientRequest request = await httpClient.getUrl(
          Uri.parse("http://t.weather.sojson.com/api/weather/city/101030100"));
      //等待服务器返回数据
      HttpClientResponse response = await request.close();
      //使用utf8.decoder从response解析数据
      var result = await response.transform(utf8.decoder).join();
      //输出响应头
      print(result);
      //httpClient关闭
      httpClient.close();
    } catch (e) {
      print('请求失败: $e');
    } finally {}
  }

  Widget build(BuildContext context) {
    //此组件是整个应用的主组件
    return new MaterialApp(
      title: 'http请求示例',
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('httpClient请求示例'),
        ),
        body: new Center(
          child: new RaisedButton(
            onPressed: getWeatherData,
            child: new Text('获取天气数据'),
          ),
        ),
      ),
    );
  }
}

如果你的请求中需要带参数,可以在uri中添加参数

  Uri uri = Uri(
          scheme: 'https',
          host: 't.weather.sojson.com',
          queryParameters: {
            "_id": 26,
            "city_code": '101030100',
            "city_name": '天津'
          });

你可能感兴趣的:(http请求的两种方式)