Flutter如何设置代理

在Flutter开发中,如何正确设置网络代理?我在使用一些依赖网络请求的包时遇到连接问题,怀疑可能需要配置代理才能正常工作。想知道在Android/iOS模拟器和真机环境下分别应该如何设置代理,是否需要修改AndroidManifest.xml或Info.plist文件?另外,有没有办法通过代码动态设置代理而不是修改系统配置?

2 回复

在Flutter项目中设置代理,可在android/app/src/main/AndroidManifest.xml中添加网络配置权限,并在代码中使用dart:ioHttpClient设置代理。也可通过环境变量HTTP_PROXYHTTPS_PROXY全局配置。

更多关于Flutter如何设置代理的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在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

选择适合你场景的方式进行配置即可。

回到顶部