Flutter网络请求插件requests的使用
Flutter网络请求插件requests的使用
requests
是一个受Python requests
模块启发的Dart库,用于发起HTTP请求。它支持JSON,并且可以像浏览器一样存储和发送Cookie。
安装
在您的pubspec.yaml
文件中添加以下依赖:
dependencies:
requests: ^4.7.0
使用方法
导入库
首先导入requests
库:
import 'package:requests/requests.dart';
发起简单的HTTP请求
var r = await Requests.get('https://google.com');
r.raiseForStatus();
String body = r.content();
Response对象
Response
对象提供了以下功能:
r.throwForStatus()
或r.raiseForStatus()
:如果响应状态码不是成功的,则抛出异常。r.statusCode
:响应状态码。r.url
:请求的URL。r.headers
:响应头。r.success
:布尔值,表示请求是否成功。r.hasError
:布尔值,表示请求是否失败。r.bytes()
:返回响应体作为字节列表。r.content()
:返回响应体作为字符串。r.json()
:解码响应体并返回结果(动态类型)。
可选参数
您可以使用以下可选参数:
json
:将被JSON编码并设置为请求体的dynamic
对象。body
:用作请求体的原始字符串。bodyEncoding
:默认为RequestBodyEncoding.FormURLEncoded
,将设置content-type
头。headers
:自定义客户端头的Map<String, String>
。timeoutSeconds
:默认为10秒,超过该时间未收到服务器响应则抛出异常。persistCookies
:默认为true
,是否遵循服务器指令保存Cookie。verify
:默认为true
,是否启用SSL验证。withCredentials
:默认为false
,用于处理Web端的Cookie、授权头或TLS客户端证书。
💡 注意:一次请求只能使用
body
或json
中的一个。
类方法
.getHostname(url)
:返回给定URL的主机名。.clearStoredCookies(hostname)
:清除指定主机名的存储Cookie。.setStoredCookies(hostname, CookieJar)
:设置指定主机名的存储Cookie。.getStoredCookies(hostname)
:返回指定主机名的存储Cookie。.addCookie(hostname, name, value)
:向指定主机名的CookieJar中添加Cookie。
示例代码
HTTP POST请求,解析响应为JSON
var r = await Requests.post(
'https://reqres.in/api/users',
body: {
'userId': 10,
'id': 91,
'title': 'aut amet sed',
},
bodyEncoding: RequestBodyEncoding.FormURLEncoded);
r.raiseForStatus();
dynamic json = r.json();
print(json!['id']);
HTTP DELETE请求
var r = await Requests.delete('https://reqres.in/api/users/10');
r.raiseForStatus();
忽略自签名SSL证书
var r = await Requests.get('https://expired.badssl.com/', verify: false);
r.raiseForStatus();
管理存储的Cookie
String url = "https://example.com";
String hostname = Requests.getHostname(url);
await Requests.clearStoredCookies(hostname);
// 使用CookieJar.parseCookiesString设置Cookie
var cookies = CookieJar.parseCookiesString("name=value");
await Requests.setStoredCookies(hostname, cookies);
// 使用Requests.addCookie添加单个Cookie
Requests.addCookie(hostname, "name", "value");
完整示例
以下是一个完整的示例,展示了如何使用requests
插件查询Google Books API:
import 'package:requests/requests.dart';
void main(List<String> arguments) async {
// 使用Google Books API搜索关于requests的书籍
var url = 'https://www.googleapis.com/books/v1/volumes?q=requests';
try {
// 发起GET请求并等待响应
var response = await Requests.get(url);
// 检查响应状态码
if (response.statusCode == 200) {
// 解析JSON格式的响应
var jsonResponse = response.json();
var itemCount = jsonResponse["totalItems"];
print('找到关于requests的书籍数量: $itemCount.');
} else {
print('请求失败,状态码: ${response.statusCode}');
}
} catch (e) {
print('请求过程中发生错误: $e');
}
}
更多示例可以在GitHub仓库的example目录中找到。
更多关于Flutter网络请求插件requests的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求插件requests的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,虽然没有一个直接名为 requests
的官方插件用于网络请求,但通常我们会使用 dio
或 http
等流行的第三方库来执行网络请求。下面我将展示如何使用 dio
库来进行网络请求,因为它在Flutter社区中非常受欢迎且功能强大。
首先,你需要在你的 pubspec.yaml
文件中添加 dio
依赖:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.4 # 请检查最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,你可以在你的 Flutter 应用中使用 dio
来执行网络请求。下面是一个简单的示例,展示了如何发送 GET 和 POST 请求:
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Network Requests with Dio'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 发送 GET 请求
try {
Response response = await Dio().get('https://jsonplaceholder.typicode.com/posts/1');
print(response.data);
// 在这里处理响应数据,例如更新UI
} catch (e) {
print('GET 请求错误: $e');
}
},
child: Text('发送 GET 请求'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// 发送 POST 请求
var data = FormData.fromMap({
'title': 'foo',
'body': 'bar',
'userId': 1,
});
try {
Response response = await Dio().post('https://jsonplaceholder.typicode.com/posts', data: data);
print(response.data);
// 在这里处理响应数据,例如更新UI
} catch (e) {
print('POST 请求错误: $e');
}
},
child: Text('发送 POST 请求'),
),
],
),
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中有两个按钮,一个用于发送 GET 请求,另一个用于发送 POST 请求。GET 请求访问了一个示例 API,该 API 返回一个具体的帖子。POST 请求向同一个 API 发送了一些表单数据。
注意事项
- 错误处理:在实际应用中,你应该更加细致地处理网络错误,例如重试逻辑、用户通知等。
- 环境配置:对于不同的环境(如开发、测试、生产),你可能需要配置不同的 API 端点。可以使用
.env
文件或类似的配置管理工具。 - 安全性:确保你的网络请求是安全的,特别是当涉及到敏感信息(如用户凭证)时。考虑使用 HTTPS 和适当的身份验证机制。
通过上述代码,你可以快速上手在 Flutter 中使用 dio
库进行网络请求。如果你需要更高级的功能,如文件上传、下载、取消请求等,dio
的文档提供了详细的说明和示例。