Flutter如何设置代理
在Flutter开发中,如何正确设置网络代理?我在使用一些依赖网络请求的包时遇到连接问题,怀疑可能需要配置代理才能正常工作。想知道在Android/iOS模拟器和真机环境下分别应该如何设置代理,是否需要修改AndroidManifest.xml或Info.plist文件?另外,有没有办法通过代码动态设置代理而不是修改系统配置?
2 回复
在Flutter中设置代理有两种方式:一种是在开发时配置Dart/Flutter工具的代理,另一种是在应用中配置网络请求的代理。
1. 开发环境代理设置
设置Dart工具代理
在命令行中执行:
export HTTP_PROXY=http://proxy.example.com:8888
export HTTPS_PROXY=http://proxy.example.com:8888
Windows系统使用:
set HTTP_PROXY=http://proxy.example.com:8888
set HTTPS_PROXY=http://proxy.example.com:8888
设置Flutter包管理代理
在用户目录下的.bashrc、.zshrc或Windows环境变量中永久设置:
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
2. 应用内代理设置
使用dio库设置代理
import 'package:dio/dio.dart';
void main() {
final dio = Dio();
// 设置代理
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.findProxy = (uri) {
return "PROXY proxy.example.com:8888";
};
// 忽略证书验证(如需要)
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
// 使用dio发起请求
dio.get('https://api.example.com/data');
}
使用http库设置代理
import 'package:http/http.dart' as http;
void fetchData() async {
final client = http.IOClient(
HttpClient()
..findProxy = (uri) {
return "PROXY proxy.example.com:8888";
}
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true,
);
final response = await client.get(Uri.parse('https://api.example.com/data'));
client.close();
}
注意事项
- 将
proxy.example.com:8888替换为实际的代理服务器地址和端口 - 生产环境中建议通过配置方式管理代理设置
- 如果需要认证,在代理地址中添加用户名密码:
http://user:pass@proxy.com:8888
选择适合你场景的方式进行配置即可。


