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';
};
}
}