# Flutter

> Captura el tráfico HTTPS de apps de Flutter con Proxyman en emuladores de Android, dispositivos Android, simuladores de iOS e iPhone, con o sin cambios en el código.

## ✅ 1. Solución nueva {#-1-new-solution}

> **Consejo:** A partir de Proxyman 6.4.0 o posterior, o de Windows/Linux 3.7.0 o posterior

### Emuladores de Android {#android-emulators}

Proxyman puede capturar HTTPS de tu app de Flutter en el emulador de Android con un solo clic. A diferencia de la solución anterior, no necesitas cambiar el código de Flutter.

1. Inicia Proxyman -> Certificate Menu -> Install Certificate on Android -> Emulators…
2. Asegúrate de configurar antes tu emulador de Android, y debe ser una imagen de Google APIs.

Consulta [automatic-script-for-android-emulator.md](https://proxyman.com/docs/es/debug-devices/android-device/automatic-script-for-android-emulator) para aprender a configurar tus emuladores de Android

3. Marca "Install Proxyman VPN on Android emulators"
4. Haz clic en "Override All Emulators"

![Guía de configuración del emulador de Android de Proxyman con Install Proxyman VPN marcado y el botón Override All Emulators](https://proxyman.com/docs/assets/Screenshot%202026-01-10%20at%2019.29.46.jpg)

_Captura HTTPS de una app de Flutter en el emulador de Android con Proxyman_

5. Se abre una nueva ventana de Terminal que ejecuta nuestro script de bash para configurar tus emuladores.
6. Cuando termine, se instala una nueva app VPN en tus emuladores.
7. Toca el botón VPN para iniciarla -> Listo ✅
8. Abre tu app de Flutter y envía solicitudes HTTPS. Proxyman las capturará ✅

![App VPN de Proxyman en el emulador de Android, conectada y enviando el tráfico de Flutter y React Native a Proxyman](https://proxyman.com/docs/assets/Screenshot%202026-01-10%20at%2019.43.10.jpg)

## ⚠️ 2. Solución anterior {#️-2-old-solution}

> **Aviso:** La solución anterior funciona con Proxyman para macOS 6.3.0 o anterior, y Windows/Linux 3.6.0 o anterior

### 2.1 Problema {#21-problem}

[Flutter no usa el proxy a nivel de sistema](https://github.com/flutter/flutter/issues/20376), por lo que, si usas Proxyman, es posible que no veas ningún tráfico de tu proyecto de Flutter.

La buena noticia es que puedes solucionar este problema configurando el cliente HTTP de Flutter para usar Proxyman como proxy.

En general, debes configurar el cliente HTTP para enviar todo el tráfico al servidor proxy de Proxyman, que escucha en IP = localhost, puerto = 9090.

#### 1. Configura Flutter (obligatorio en todas las plataformas: iOS y Android) {#1-set-up-flutter-required-for-all-platforms---ios--android}

Los pasos varían ligeramente según el cliente HTTP. Cubrimos algunos de los más populares:

* La clase [HttpClient](https://api.dartlang.org/stable/2.4.1/dart-io/HttpClient-class.html) de Dart
* El paquete [http](https://pub.dev/packages/http)
* [Dio](https://pub.dev/packages/dio)

Si usas un emulador de Android o un simulador de iOS, puedes usar `String proxy = 'localhost:9090'`. En dispositivos Android físicos, usa `String proxy = '<YOUR_LOCAL_IP>:9090'`.

Puedes encontrar \<YOUR\_LOCAL\_IP> en Proxyman -> Certificate menu -> Install Certificate on iOS -> Physical Devices…

Usa la configuración siguiente para la biblioteca de red que utiliza tu app de Flutter:

#### Clase HttpClient de Dart {#dart-httpclient-class}

```dart
// Make sure to replace <YOUR_LOCAL_IP> with 
// the external IP of your computer if you're using Android. 
// You can get the IP in the Android Setup Guide window
String proxy = Platform.isAndroid ? '<YOUR_LOCAL_IP>:9090' : 'localhost:9090';

// Create a new HttpClient instance.
HttpClient httpClient = HttpClient();

// Hook into the findProxy callback to set
// the client's proxy.
httpClient.findProxy = (uri) {
  return "PROXY $proxy;";
};

// This is a workaround to allow Proxyman to receive
// SSL payloads when your app is running on Android
httpClient.badCertificateCallback = (cert, host, port) => true;
```

#### Paquete http {#http-package}

```dart
// Make sure to replace <YOUR_LOCAL_IP> with 
// the external IP of your computer if you're using Android. 
// You can get the IP in the Android Setup Guide window
String proxy = Platform.isAndroid ? '<YOUR_LOCAL_IP>:9090' : 'localhost:9090';

// Create a new HttpClient instance.
HttpClient httpClient = HttpClient();

// Hook into the findProxy callback to set
// the client's proxy.
httpClient.findProxy = (uri) {
  return "PROXY $proxy;";
};

// This is a workaround to allow Proxyman to receive
// SSL payloads when your app is running on Android.
httpClient.badCertificateCallback = (cert, host, port) => true;

// Pass your newly instantiated HttpClient to http.IOClient.
IOClient myClient = IOClient(httpClient);

// Make your request as normal.
final response = myClient.get('/my-url');
```

#### Dio ≥ v5.0.0 (recomendado) {#dio--v500-recommended}

```dart
// Make sure to replace <YOUR_LOCAL_IP> with 
// the external IP of your computer if you're using Android. 
// You can get the IP in the Android Setup Guide window
String proxy = Platform.isAndroid ? '<YOUR_LOCAL_IP>:9090' : 'localhost:9090';

// Create a new Dio instance.
Dio dio = Dio();

dio.httpClientAdapter = IOHttpClientAdapter(
  createHttpClient: () {
    final client = HttpClient();
    client.findProxy = (uri) {
      return 'PROXY $proxy';
    };
    client.badCertificateCallback = (cert, host, port) => true;
    return client;
  },
  validateCertificate: (cert, host, port) {
    return true;
  },
); 
```

#### Dio ＜ v5.0.0 (APIs obsoletas) {#dio--v500-deprecated-apis}

```dart
// Make sure to replace <YOUR_LOCAL_IP> with 
// the external IP of your computer if you're using Android. 
// You can get the IP in the Android Setup Guide window
String proxy = Platform.isAndroid ? '<YOUR_LOCAL_IP>:9090' : 'localhost:9090';

// Create a new Dio instance.
Dio dio = Dio();

// Tap into the onHttpClientCreate callback
// to configure the proxy just as we did earlier.
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { 
  // Hook into the findProxy callback to set the client's proxy.
  client.findProxy = (url) {
    return 'PROXY $proxy';
  };
  
  // This is a workaround to allow Proxyman to receive
  // SSL payloads when your app is running on Android.
  client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
}
```

### 2.2 Flutter con simuladores de iOS {#22-flutter-with-ios-simulators}

1. Inicia tu simulador de iOS desde Flutter
2. En Proxyman -> Certificate menu -> Install Certificate on iOS -> Simulators…
3. Sigue todos los pasos siguientes

![Configuración de simuladores de iOS en Proxyman con tres pasos: certificado Installed &#x26; Trusted, Prepare Simulators y Reboot](https://proxyman.com/docs/assets/proxyman-ios-simulators-setup.jpg)

_Instala y confía en el certificado de Proxyman en tus simuladores de iOS_

4. ✅ Listo. Proxyman puede capturar tu tráfico HTTPS.

### 2.3 Flutter con dispositivos iOS {#23-flutter-with-ios-devices}

* Sigue la [guía de configuración de dispositivos iOS](https://proxyman.com/docs/es/debug-devices/ios-device)

### 2.4 Flutter con el emulador de Android {#24-flutter-with-android-emulator}

* Sigue la [guía del script automático para el emulador de Android](https://proxyman.com/docs/es/debug-devices/android-device/automatic-script-for-android-emulator)

### 2.5 Flutter con dispositivos Android {#25-flutter-with-android-devices}

* Sigue la [guía de configuración de dispositivos Android](https://proxyman.com/docs/es/debug-devices/android-device)

#### Créditos y referencias {#credit--reference}

Créditos a James Dixon, de [https://flutterigniter.com/debugging-network-requests/](https://flutterigniter.com/debugging-network-requests/)

## Más información {#learn-more}

* [Cómo capturar tráfico HTTPS de apps de Flutter en emuladores de Android](https://proxyman.com/posts/Capture-https-flutter-android-emulator)
* [Cómo capturar tráfico HTTPS de una app de Flutter en iOS](https://proxyman.com/posts/2024-11-11-capture-https-traffic-from-flutter-ios)
* [Captura el tráfico HTTP/HTTPS de apps de Flutter con Proxyman](https://proxyman.com/flutter) (sitio web de Proxyman)
