Dart 在 Future 函数中的 HTTP 请求返回 null



我正试图从网站获取数据

void main() async {
var resp = await http.get(
Uri.parse('https://m.example.com/example'),
headers: {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'
},
);
print(resp.body);
}

但是当我把这个代码包装成一个函数时,resp返回空

Future getLiveHtml(String url) async {
var resp = await http.get(
Uri.parse(url),
headers: {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'
},
);
return resp.body;
}

如何修复?

您应该在方法Future<String>描述中指定返回的类型,如下所示:

library shfl;
import 'dart:convert';
import 'package:http/http.dart' as http;
static Future<String> getLiveHtml(String url) async {
var resp = await http.get(
Uri.parse(url),
headers: {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'
},
);
return resp.body;
}

然后用await语句在async函数中调用它,如下所示:

import 'package:flutter_test/flutter_test.dart';
import 'package:shfl/shfl.dart';
void main() {
test('prints html from google', () async {
var rez = await Stuff.getLiveHtml("https://google.com/");
print(rez);
});
}

您的项目使用的是http包的哪个版本?

最新更新