flutter中如何通过dio使用系统代理
在Flutter项目中,我正在使用dio库进行网络请求。现在需要让dio走系统的代理设置(比如电脑或手机配置的HTTP/HTTPS代理),但发现默认情况下dio似乎不会自动识别系统代理。请问该如何正确配置dio,使其能自动使用系统级别的代理设置?是否需要通过ProxyController或其他方式手动设置?希望能提供具体的代码示例。
2 回复
在Flutter中使用Dio设置系统代理,可通过以下方式:
- 创建代理配置:
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) {
client.findProxy = (uri) {
return "PROXY 127.0.0.1:8888;";
};
};
- 支持HTTPS需添加证书:
client.badCertificateCallback = (cert, host, port) => true;
注意:iOS需在Info.plist中配置ATS,Android需配置网络安全策略。
更多关于flutter中如何通过dio使用系统代理的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用Dio通过系统代理发送HTTP请求,可以通过以下步骤实现:
-
安装依赖:
dependencies: dio: ^5.0.0 -
配置Dio使用系统代理:
import 'package:dio/dio.dart'; void main() async { final dio = Dio(); // 获取系统代理设置(适用于移动端和桌面端) dio.httpClientAdapter = IOHttpClientAdapter( createHttpClient: () { final HttpClient client = HttpClient(); // 启用系统代理(默认已启用,此配置可选) client.findProxy = (url) => HttpClient.findProxyFromEnvironment(url); return client; }, ); try { final response = await dio.get('https://example.com'); print(response.data); } catch (e) { print('请求失败: $e'); } }
关键点说明:
HttpClient.findProxyFromEnvironment会自动读取系统代理设置(如环境变量HTTP_PROXY/HTTPS_PROXY)。- 在Android/iOS中,系统代理通常由设备网络设置自动管理,无需额外配置。
- 在桌面端(Windows/macOS/Linux),会读取系统或终端的代理环境变量。
注意事项:
- 如果代理需要认证,需在请求头中添加
Proxy-Authorization:dio.options.headers['Proxy-Authorization'] = 'Basic ${base64Encode(utf8.encode('username:password'))}'; - 测试时请确保设备/模拟器已正确配置代理。
此方法兼容大部分场景,无需手动指定代理地址。

