createHttpClient method
Create an HttpClient configured with this proxy setup.
Implementation
HttpClient createHttpClient() {
SecurityContext? securityContext;
if (hasTLSCustomization) {
securityContext = SecurityContext(withTrustedRoots: true);
if (mtlsConfig?.cert != null) {
try {
securityContext.useCertificateChainBytes(
utf8.encode(mtlsConfig!.cert!),
);
} catch (e) {
stderr.writeln('ProxyConfiguration: Failed to set client cert: $e');
}
}
if (mtlsConfig?.key != null) {
try {
securityContext.usePrivateKeyBytes(
utf8.encode(mtlsConfig!.key!),
password: mtlsConfig!.passphrase,
);
} catch (e) {
stderr.writeln('ProxyConfiguration: Failed to set client key: $e');
}
}
if (caCertificates != null) {
for (final cert in caCertificates!) {
try {
securityContext.setTrustedCertificatesBytes(utf8.encode(cert));
} catch (e) {
stderr.writeln('ProxyConfiguration: Failed to add CA cert: $e');
}
}
}
}
final client = securityContext != null
? HttpClient(context: securityContext)
: HttpClient();
if (hasProxy) {
final proxy = effectiveProxy!;
client.findProxy = (uri) {
if (shouldBypass(uri.toString())) {
return 'DIRECT';
}
final proxyUri = Uri.parse(proxy);
return 'PROXY ${proxyUri.host}:${proxyUri.port}';
};
}
return client;
}