platform_proxy 0.9.2-nullsafe
platform_proxy: ^0.9.2-nullsafe copied to clipboard
Platform's proxy settings discovery plugin.
platform_proxy #
Flutter support only limited Proxy configuration out of the box. All that we can do it's provide system environment variables http_proxy
, https_proxy
, e.t.c more details in documentation. If you won't define the variables, your http requests will bypass system proxy configuration.
This plugin is here to fix this.
Proxy config matrix #
Different OSes provide different options to configure proxy for user. Table below will try to represent the options. (Feel free to point out if something missed)
OS | Manual | Manual + Credentials | Manual + Bypass | AutoProxy config (PAC) |
---|---|---|---|---|
Android | ✓ | ✗ | ✓ | ✓ |
iOS | ✓ | ✓ | ✓ | ✓ |
Windows | ✓ | ✗ | ✓ | ✓ |
Mac OS | ✓ | ✓ | ✓ | ✓ |
Linux | in_progress | in_progress | in_progress | in_progress |
What platform_proxy plugin supports #
Table below represent configuration options from Proxy config matrix which suppurted by the plugin.
OS | Manual | Manual + Credentials | Manual + Bypass | AutoProxy config (PAC) |
---|---|---|---|---|
Android | ✓ | ✗ | ✓ | ✓ |
iOS | ✓ | ✓ | ✓ | ✓ |
Windows | ✓ | ✗ | ✓ | ✓ |
Mac OS | ✓ | ✓ | ✓ | ✓ |
Linux | in_progress | in_progress | in_progress | in_progress |
Getting Started #
Work is still in progress. There is an issue in Dart SDK itself which block easy integration of system proxy configuration.
Instance of PlatformProxy
class provides list of Proxy
which enabled for provided url
.
Yes we have to request proxy configuration for every
URL
requested from our app, to get correct configuration. Even if a system has configuration for a proxy it doesn't mean that the proxy is enabled for the URL (e.g. bypass option and PAC)
Then the proxy configuration have to be provided with findProxy
method. The method support extended PAC
string (original one doesn't support credentials). To simplify this the plugin has extension to convert Iterable<Proxy>
to PAC string with or without credentials:
var platformProxy = PlatformProxy();
var proxies = await _platformProxy.getPlatformProxies(url: "your url");
var pacString = proxies.getProxiesAsPac();
or
var pacString = proxies.pacStringWithCredentials();
Unfortunately findProxy
method is synchronous and we are not allowed to use await
there. Before that problem is fixed you can try to use ProxyAwareHttpClient
for dart.io
HttpClient
which prefetch proxy configuration before make real request.
final client = ProxyAwareHttpClient(client: HttpClient(), platformProxy: PlatformProxy());
client.getUrl(Uri.parse('https://flutter.dev')).then((value) => value.close()).then((value) {});