HttpClient constructor
HttpClient({})
Initiates an HttpClient with the settings provided in the arguments.
The settings control whether this client supports brotli and
HttpProtocols like quic
, http2
and http/1.1
. If quic
is
enabled, then quicHints can be provided. userAgent and
acceptLanguage can also be provided.
Throws CronetNativeError if HttpClient can't be created.
Implementation
HttpClient({
this.userAgent = 'Dart/2.12',
this.protocol = HttpProtocol.quic,
this.quicHints = const [],
this.brotli = true,
this.acceptLanguage = 'en_US',
}) : _cronetEngine = cronet.Cronet_Engine_Create() {
if (_cronetEngine == nullptr) throw Error();
wrapper.RegisterHttpClient(this, _cronetEngine.cast());
// Starting the engine with parameters.
final engineParams = cronet.Cronet_EngineParams_Create();
if (engineParams == nullptr) throw Error();
cronet.Cronet_EngineParams_user_agent_set(
engineParams, userAgent.toNativeUtf8().cast<Int8>());
switch (protocol) {
case HttpProtocol.quic:
cronet.Cronet_EngineParams_enable_quic_set(engineParams, true);
break;
case HttpProtocol.http2:
cronet.Cronet_EngineParams_enable_http2_set(engineParams, true);
cronet.Cronet_EngineParams_enable_quic_set(engineParams, false);
break;
case HttpProtocol.http:
cronet.Cronet_EngineParams_enable_quic_set(engineParams, false);
cronet.Cronet_EngineParams_enable_http2_set(engineParams, false);
break;
default:
break;
}
if (protocol != HttpProtocol.quic && quicHints.isNotEmpty) {
throw ArgumentError('Quic is not enabled but quic hints are provided.');
}
for (final quicHint in quicHints) {
final hint = cronet.Cronet_QuicHint_Create();
if (hint == nullptr) throw Error();
cronet.Cronet_QuicHint_host_set(
hint, quicHint.host.toNativeUtf8().cast<Int8>());
cronet.Cronet_QuicHint_port_set(hint, quicHint.port);
cronet.Cronet_QuicHint_alternate_port_set(hint, quicHint.alternatePort);
cronet.Cronet_EngineParams_quic_hints_add(engineParams, hint);
cronet.Cronet_QuicHint_Destroy(hint);
}
cronet.Cronet_EngineParams_enable_brotli_set(engineParams, brotli);
cronet.Cronet_EngineParams_accept_language_set(
engineParams, acceptLanguage.toNativeUtf8().cast<Int8>());
final res =
cronet.Cronet_Engine_StartWithParams(_cronetEngine, engineParams);
if (res != Cronet_RESULT.Cronet_RESULT_SUCCESS) {
throw CronetNativeError(res);
}
cronet.Cronet_EngineParams_Destroy(engineParams);
}