Open1

flutterでproxyを使う

ほすほす
  • flutter製のアプリは、デフォルトではシステム側のproxyを利用しない
  • システムのproxyを利用するためには、HttpClientクラスにプロキシ自動設定(PAC)を明示的に設定する必要がある
  • system_proxy package を利用する
  • 参考にしたもの
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // システムのproxy設定を取得する.
  Map<String, String>? proxy = await SystemProxy.getProxySettings();
  log('=== proxy: $proxy');
  // HttpOverridesの派生クラスをHttpOverrides.globalに指定する.
  HttpOverrides.global = ProxiedHttpOverrides(
    proxy?['host'],
    proxy?['port'],
  );
  runApp(const MyApp());
}
class ProxiedHttpOverrides extends HttpOverrides {
  final String? _port;
  final String? _host;
  ProxiedHttpOverrides(this._host, this._port);

  
  HttpClient createHttpClient(SecurityContext? context) {
    // host情報が設定されていればhostとportを指定、そうでなければ DIRECT を設定.
    return super.createHttpClient(context)
      // set proxy
      ..findProxy = (uri) {
        return _port != null ? "PROXY $_host:$_port;" : 'DIRECT';
      };
  }
}