Перейти к содержимому
Гайды 2 мин чтения 2 просмотров

Использование прокси в Dart/Flutter

Настройка прокси в Dart и Flutter: HttpClient, dio, SOCKS5 и особенности работы с прокси в мобильных приложениях.

Прокси в Dart/Flutter

Dart — язык программирования для Flutter-приложений. Работа с прокси в Dart осуществляется через стандартный HttpClient и популярные библиотеки (dio, http).

Стандартный HttpClient

HTTP прокси

import 'dart:io';

void main() async {
  final client = HttpClient();

  // Настройка прокси
  client.findProxy = (uri) {
    return "PROXY proxy_ip:8080";
  };

  final request = await client.getUrl(
    Uri.parse("https://httpbin.org/ip")
  );
  final response = await request.close();

  await response.transform(utf8.decoder).forEach(print);
  client.close();
}

С аутентификацией

import 'dart:io';

void main() async {
  final client = HttpClient();

  client.findProxy = (uri) {
    return "PROXY proxy_ip:8080";
  };

  // Обработка аутентификации прокси
  client.authenticate = (uri, scheme, realm) async {
    client.addProxyCredentials(
      "proxy_ip",
      8080,
      "realm",
      HttpClientBasicCredentials("username", "password")
    );
    return true;
  };

  final request = await client.getUrl(
    Uri.parse("https://httpbin.org/ip")
  );
  final response = await request.close();

  await response.transform(utf8.decoder).forEach(print);
  client.close();
}

Прямое подключение (без прокси)

client.findProxy = (uri) => "DIRECT";

Условная маршрутизация

client.findProxy = (uri) {
  if (uri.host.contains("target-site.com")) {
    return "PROXY proxy_ip:8080";
  }
  return "DIRECT";
};

Библиотека dio

dio — самая популярная HTTP-библиотека для Flutter.

Установка

# pubspec.yaml
dependencies:
  dio: ^5.4.0
  dio_proxy_adapter: ^0.0.2  # для прокси

HTTP прокси с dio

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

void main() async {
  final dio = Dio();

  // Настройка прокси через HttpClient adapter
  (dio.httpClientAdapter as IOHttpClientAdapter).createHttpClient = () {
    final client = HttpClient();
    client.findProxy = (uri) {
      return "PROXY proxy_ip:8080";
    };
    // Для самоподписанных сертификатов (тестирование)
    client.badCertificateCallback = (cert, host, port) => true;
    return client;
  };

  final response = await dio.get("https://httpbin.org/ip");
  print(response.data);
}

С аутентификацией

(dio.httpClientAdapter as IOHttpClientAdapter).createHttpClient = () {
  final client = HttpClient();
  client.findProxy = (uri) => "PROXY proxy_ip:8080";
  client.addProxyCredentials(
    "proxy_ip",
    8080,
    "",
    HttpClientBasicCredentials("user", "pass")
  );
  return client;
};

SOCKS5 прокси

Через socks5_proxy

# pubspec.yaml
dependencies:
  socks5_proxy: ^1.0.4
import 'dart:io';
import 'package:socks5_proxy/socks_client.dart';

void main() async {
  // Создание SOCKS5 клиента
  final proxy = SocksTCPClient.connect(
    [ProxySettings(InternetAddress("proxy_ip"), 1080,
      password: Password("username", "password"))],
    InternetAddress("93.184.216.34"), // целевой IP
    80,
  );

  // Используйте socket для HTTP-запросов
}

Через system proxy с SOCKS

client.findProxy = (uri) {
  return "SOCKS5 proxy_ip:1080";
};

Примечание: стандартный HttpClient в Dart поддерживает только PROXY (HTTP) и DIRECT. Для SOCKS нужны сторонние библиотеки.

Flutter-специфика

Настройка для Android

Android требует настройки network_security_config.xml для работы с cleartext HTTP прокси:

<!-- android/app/src/main/res/xml/network_security_config.xml -->
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

Настройка для iOS

Для iOS прокси работает через системные настройки URLSession. Flutter-приложение автоматически использует системный прокси.

Переменные окружения

В debug-режиме можно задать прокси через переменные:

// Через аргументы запуска
// flutter run --dart-define=HTTP_PROXY=http://proxy_ip:8080

Ротация прокси

import 'dart:io';
import 'dart:math';

final proxies = [
  "PROXY proxy1:8080",
  "PROXY proxy2:8080",
  "PROXY proxy3:8080",
];

final random = Random();

void main() async {
  final client = HttpClient();

  client.findProxy = (uri) {
    return proxies[random.nextInt(proxies.length)];
  };

  // Запросы будут использовать разные прокси
  for (var i = 0; i < 10; i++) {
    final request = await client.getUrl(
      Uri.parse("https://httpbin.org/ip")
    );
    final response = await request.close();
    final body = await response.transform(utf8.decoder).join();
    print("Request $i: $body");
  }

  client.close();
}

Обработка ошибок

try {
  final request = await client.getUrl(uri);
  final response = await request.close();
  // обработка ответа
} on SocketException catch (e) {
  print("Connection error: $e");
} on HttpException catch (e) {
  print("HTTP error: $e");
} on HandshakeException catch (e) {
  print("TLS/SSL error: $e");
} catch (e) {
  print("Unexpected error: $e");
}

Заключение

Dart и Flutter предоставляют базовые, но достаточные инструменты для работы с HTTP-прокси. Для продвинутых сценариев (SOCKS5, аутентификация) используйте dio с кастомным HttpClient adapter. При разработке Flutter-приложений учитывайте платформенные особенности Android и iOS.

Обновлено: 06.03.2026
Назад к категории

Читайте также

Гайды 1 мин

Настройка прокси в Cypress для E2E-тестирования

Настройка прокси в Cypress: HTTP_PROXY переменные, cy-proxy-middleware и тестирование гео-зависимого контента.

Гайды 1 мин

Как автоматизировать закупку прокси через API

Автоматизация покупки и управления прокси через API провайдеров: интеграция, мониторинг расхода и auto-renewal.

Гайды 1 мин

Создание дашборда мониторинга прокси на Grafana

Пошаговое создание дашборда для мониторинга прокси в Grafana: метрики, Prometheus exporters и alerting.

Гайды 1 мин

Как тестировать прокси перед покупкой

Чеклист тестирования прокси перед покупкой: скорость, стабильность, анонимность, гео и совместимость с целевыми сайтами.

Гайды 1 мин

Как настроить sticky sessions через прокси

Sticky sessions (липкие сессии): сохранение одного IP на протяжении сессии, настройка через провайдера и самостоятельно.

Гайды 1 мин

Использование прокси с Camoufox

Camoufox — модифицированный Firefox для обхода антиботов. Настройка прокси, fingerprint и stealth-режим.

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира