Dart HttpClientBasicCredentials
最后修改于 2025 年 4 月 4 日
Dart 中的 HttpClientBasicCredentials 类提供了一种处理 HTTP 基本身份验证的方法。它与 Dart 的 HttpClient 一起用于安全请求。
此类创建用于 Basic 身份验证方案的凭据。它将用户名和密码以 base64 格式编码到 HTTP Authorization 标头中。
基本定义
HttpClientBasicCredentials 是 Dart dart:io 库的一部分。它实现了 HTTP 基本身份验证的凭据。
此类接受用户名和密码参数。它会自动处理 Basic 身份验证方案所需的 base64 编码。
基本身份验证示例
此示例展示了 HttpClientBasicCredentials 的基本用法。
import 'dart:io';
void main() async {
var client = HttpClient();
try {
var request = await client.getUrl(Uri.parse('https://example.com/api'));
var credentials = HttpClientBasicCredentials('user', 'pass123');
request.headers.set('Authorization', credentials.toString());
var response = await request.close();
print('Response status: ${response.statusCode}');
} finally {
client.close();
}
}
我们创建一个 HttpClient 并设置基本身份验证。凭据会自动转换为正确的 Authorization 标头字符串。
$ dart main.dart Response status: 200
处理身份验证错误
此示例演示了基本身份验证的错误处理。
import 'dart:io';
void main() async {
var client = HttpClient();
try {
var request = await client.getUrl(Uri.parse('https://example.com/api'));
var credentials = HttpClientBasicCredentials('wrong', 'credentials');
request.headers.set('Authorization', credentials.toString());
var response = await request.close();
if (response.statusCode == HttpStatus.unauthorized) {
print('Authentication failed');
} else {
print('Response status: ${response.statusCode}');
}
} finally {
client.close();
}
}
当凭据无效时,我们会检查 401 Unauthorized 状态码。该示例展示了对身份验证失败的正确错误处理。
$ dart main.dart Authentication failed
与 HttpClientRequest 一起使用
此示例展示了与 HttpClientRequest 的直接用法。
import 'dart:io';
void main() async {
var client = HttpClient();
try {
var request = await client.postUrl(Uri.parse('https://example.com/api'));
var credentials = HttpClientBasicCredentials('admin', 'secret');
request.addCredentials(credentials);
request.write('{"data": "value"}');
var response = await request.close();
print('Response status: ${response.statusCode}');
} finally {
client.close();
}
}
我们使用 addCredentials 方法,而不是手动设置标头。这是将身份验证添加到 HttpClientRequest 的首选方法。
$ dart main.dart Response status: 200
多次身份验证尝试
此示例展示了处理多次身份验证尝试。
import 'dart:io';
void main() async {
var client = HttpClient();
var credentials = [
HttpClientBasicCredentials('user1', 'pass1'),
HttpClientBasicCredentials('user2', 'pass2')
];
for (var cred in credentials) {
try {
var request = await client.getUrl(Uri.parse('https://example.com/api'));
request.addCredentials(cred);
var response = await request.close();
if (response.statusCode == HttpStatus.ok) {
print('Authenticated as ${cred.username}');
break;
}
} catch (e) {
print('Failed with ${cred.username}: $e');
}
}
client.close();
}
我们尝试多个凭据对,直到成功身份验证。当使用多个可能的帐户时,此模式很有用。
$ dart main.dart Failed with user1: HttpException Authenticated as user2
安全凭据处理
此示例演示了安全的凭据管理实践。
import 'dart:io';
class SecureAuth {
final String _username;
final String _password;
SecureAuth(this._username, this._password);
HttpClientBasicCredentials get credentials {
return HttpClientBasicCredentials(_username, _password);
}
}
void main() async {
var auth = SecureAuth('secureUser', 's3cr3tP@ss');
var client = HttpClient();
try {
var request = await client.getUrl(Uri.parse('https://example.com/api'));
request.addCredentials(auth.credentials);
var response = await request.close();
print('Response status: ${response.statusCode}');
} finally {
client.close();
}
}
我们将凭据封装在一个安全类中,以防止意外泄露。此模式有助于在处理身份验证时维护安全性。
$ dart main.dart Response status: 200
最佳实践
- 安全存储:切勿在源代码中硬编码凭据
- 仅限 HTTPS:基本身份验证始终使用 HTTPS
- 错误处理:正确处理身份验证失败
- 凭据轮换:定期更改凭据
来源
Dart HttpClientBasicCredentials 文档
本教程通过实际示例介绍了 Dart 的 HttpClientBasicCredentials 类,展示了身份验证模式和安全注意事项。
作者
列出 所有 Dart 教程。