code: public final HttpClient doOnError(BiConsumer<? super HttpClientRequest, ? super Throwable> doOnRequest,
  			BiConsumer<? super HttpClientResponse, ? super Throwable> doOnResponse) {
  		Objects.requireNonNull(doOnRequest, "doOnRequest");
  		Objects.requireNonNull(doOnResponse, "doOnResponse");
  		return new HttpClientDoOnError(this, doOnRequest, doOnResponse);
  	}
docs: Setup a callback called when {@link HttpClientRequest} has not been sent and when {@link HttpClientResponse} has not been fully
  received.
  <p>
  Note that some mutation of {@link HttpClientRequest} performed late in lifecycle
  {@link #doOnRequest(BiConsumer)} or {@link RequestSender#send(BiFunction)} might
  not be visible if the error results from a connection failure.
  
  @param doOnRequest a consumer observing connected events
  @param doOnResponse a consumer observing response failures
  
  @return a new {@link HttpClient}