HttpClient(dart自有)
1.get
点击请求按钮获取数据,解析数据获取单词展示到屏幕上。
dart
class MyState extends State {
String info = "暂无数据";
List<Widget> texts = [];
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
void parseJson(var body) {
List<Widget> wList = [];
List data = jsonDecode(body)["data"];
for (int i = 0; i < data.length; i++) {
print(data[i]["word"]);
Text text = Text(data[i]["word"]);
wList.add(text);
}
setState(() {
texts = wList;
});
}
void getData() async {
String url =
"https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/flutter";
var httpClient = HttpClient();
var request = await httpClient.getUrl(Uri.parse(url));
var response = await request.close();
var body = await response.transform(utf8.decoder).join();
if (response.statusCode == 200) {
setState(() {
info = body;
});
parseJson(body);
}
}
return Scaffold(
appBar: AppBar(
title: Text("登录"),
centerTitle: true,
backgroundColor: Colors.blue,
foregroundColor: Colors.white,
),
body: ListView(children: texts),
floatingActionButton: FloatingActionButton(
onPressed: () {
getData();
},
child: Text("请求"),
),
);
}
}
2.post
dart
void postData() async {
String url = "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/q";
HttpClient httpClient = HttpClient();
HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
// 设置请求头
request.headers.set('Content-Type', 'application/json; charset=UTF-8');
Map<String, dynamic> pMap = {"random:": "q"};
request.write(jsonEncode(pMap));
HttpClientResponse response = await request.close();
// 检查响应状态码
if (response.statusCode == HttpStatus.ok) {
// 读取响应内容
final String responseBody = await response.transform(utf8.decoder).join();
print('POST 响应数据: $responseBody');
} else {
print('请求失败,状态码: ${response.statusCode}');
}
}
原生http请求库(插件)
导入依赖
yaml
dependencies:
http: ^1.4.0
代码
dart
import 'package:http/http.dart' as http;
void httpGet() async {
String url =
"https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/flutter";
var result = await http.get(Uri.parse(url));
if (result.statusCode == HttpStatus.ok) {
print(result.body.toString());
}
}
//post
void httpPost(var body) async {
String url = "https://7a6396f8-09a1-4ade-b42a-f6db7776fb31.mock.pstmn.io/q";
var result = await http.post(Uri.parse(url), body: body);
if (result.statusCode == HttpStatus.ok) {
print(result.body.toString());
}else{
print(result.statusCode);
}
}
解析xml
xml
<books>
<book id="101">
<title>XML入门指南</title>
<author>李四</author>
<price>39.90</price>
<publisher>科技出版社</publisher>
</book>
<book id="102">
<title>Web开发实战</title>
<author>王五</author>
<price>59.00</price>
<publisher>电子工业出版社</publisher>
</book>
</books>
dart
xml.XmlDocument xmlDocument = xml.XmlDocument.parse(result.body);
Iterable<xml.XmlElement> xmlElement = xmlDocument.findElements("books");
Iterable<xml.XmlElement> books = xmlElement.single.findAllElements("book");
books.forEach((element) {
print(element.findElements("id").single.innerText);
print(element.findElements("title").single.innerText);
},);
I/flutter ( 3477): 101
I/flutter ( 3477): XML入门指南
I/flutter ( 3477): 102
I/flutter ( 3477): Web开发实战