You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用Dio配置并切换代理发送请求的方法

Dio代理配置与按需切换方案

一、核心说明

Dio的ProxyAdapter完全适配你的需求,不管是带账号密码认证的代理,还是普通代理都能处理,是官方推荐的代理配置方式。

二、具体实现步骤

1. 解析代理字符串

先把你手里的IP:port:login:password格式的代理字符串,拆分成Dio需要的独立参数:

// 解析单个代理字符串的工具函数
Map<String, String> parseProxy(String proxyStr) {
  final segments = proxyStr.split(':');
  return {
    'ip': segments[0],
    'port': segments[1],
    'username': segments[2],
    'password': segments[3],
  };
}

2. 编写代理切换函数

给Dio实例动态替换代理适配器,实现按需切换:

import 'package:dio/dio.dart';
import 'package:dio/adapter.dart';

// 初始化全局Dio实例(也可以根据需求创建局部实例)
final dio = Dio();

// 切换代理的核心函数
void setProxy(String proxyStr) {
  final proxyData = parseProxy(proxyStr);
  // 创建新的代理适配器
  final proxyAdapter = ProxyAdapter();
  // 设置代理地址,格式为 http://[IP]:[端口]
  proxyAdapter.setProxy('http://${proxyData['ip']}:${proxyData['port']}');
  // 配置代理认证(你的代理带账号密码,必须加这一步)
  proxyAdapter.authentication = BasicAuth(
    username: proxyData['username']!,
    password: proxyData['password']!,
  );
  // 给Dio替换成新的代理适配器
  dio.httpClientAdapter = proxyAdapter;
}

3. 按流程执行请求

按照你期望的“切换代理→发请求→处理→再切换”流程执行:

void main() async {
  // 你的代理列表
  final proxyList = [
    '123.45.67.89:8080:korea_user1:pass_123',
    '98.76.54.32:3128:korea_user2:pass_456',
  ];

  try {
    // 第一步:用第1个代理发请求
    setProxy(proxyList[0]);
    var res1 = await dio.get('https://your-target-api.com/get-data');
    print('代理1请求结果: ${res1.data}');

    // 这里可以插入响应处理、延迟等操作
    await Future.delayed(const Duration(seconds: 2));

    // 第二步:切换到第2个代理发请求
    setProxy(proxyList[1]);
    var res2 = await dio.post('https://your-target-api.com/post-data', data: {'content': 'test'});
    print('代理2请求结果: ${res2.data}');

    // 后续可以循环或按需继续切换代理...
  } catch (error) {
    print('请求失败: $error');
  }
}

额外提示

  • 如果遇到不需要认证的代理,直接删除proxyAdapter.authentication这一段代码即可。
  • 如果需要同时用多个代理发起并发请求,可以创建多个Dio实例,每个实例绑定不同的代理适配器,互不干扰。

内容的提问来源于stack exchange,提问作者egoist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:42:15