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 教程。