com.squareup.okhttp.internal.http.HttpEngine#getResponseHeaders ( )源码实例Demo

下面列出了com.squareup.okhttp.internal.http.HttpEngine#getResponseHeaders ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: wildfly-samples   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码2 项目: L.TileLayer.Cordova   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码4 项目: IoTgo_Android_App   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码5 项目: android-discourse   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection) throws IOException {
    HttpEngine httpEngine = getHttpEngine(httpConnection);
    URI uri = httpEngine.getUri();
    ResponseHeaders response = httpEngine.getResponseHeaders();
    RawHeaders varyHeaders = httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
    Entry entry = new Entry(uri, varyHeaders, httpConnection);
    DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse) ? ((EntryCacheResponse) conditionalCacheHit).snapshot : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
    DiskLruCache.Editor editor = null;
    try {
        editor = snapshot.edit(); // returns null if snapshot is not current
        if (editor != null) {
            entry.writeTo(editor);
            editor.commit();
        }
    } catch (IOException e) {
        abortQuietly(editor);
    }
}
 
源代码6 项目: phonegapbootcampsite   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码7 项目: reader   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码9 项目: reader   文件: HttpResponseCache.java
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
private void update(CacheResponse conditionalCacheHit, HttpURLConnection httpConnection)
    throws IOException {
  HttpEngine httpEngine = getHttpEngine(httpConnection);
  URI uri = httpEngine.getUri();
  ResponseHeaders response = httpEngine.getResponseHeaders();
  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Snapshot snapshot = (conditionalCacheHit instanceof EntryCacheResponse)
      ? ((EntryCacheResponse) conditionalCacheHit).snapshot
      : ((EntrySecureCacheResponse) conditionalCacheHit).snapshot;
  DiskLruCache.Editor editor = null;
  try {
    editor = snapshot.edit(); // returns null if snapshot is not current
    if (editor != null) {
      entry.writeTo(editor);
      editor.commit();
    }
  } catch (IOException e) {
    abortQuietly(editor);
  }
}
 
源代码11 项目: L.TileLayer.Cordova   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}
 
源代码12 项目: wildfly-samples   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}
 
源代码13 项目: android-discourse   文件: HttpResponseCache.java
@Override
public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException {
    if (!(urlConnection instanceof HttpURLConnection)) {
        return null;
    }

    HttpURLConnection httpConnection = (HttpURLConnection) urlConnection;
    String requestMethod = httpConnection.getRequestMethod();

    if (maybeRemove(requestMethod, uri)) {
        return null;
    }
    if (!requestMethod.equals("GET")) {
        // Don't cache non-GET responses. We're technically allowed to cache
        // HEAD requests and some POST requests, but the complexity of doing
        // so is high and the benefit is low.
        return null;
    }

    HttpEngine httpEngine = getHttpEngine(httpConnection);
    if (httpEngine == null) {
        // Don't cache unless the HTTP implementation is ours.
        return null;
    }

    ResponseHeaders response = httpEngine.getResponseHeaders();
    if (response.hasVaryAll()) {
        return null;
    }

    RawHeaders varyHeaders = httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
    Entry entry = new Entry(uri, varyHeaders, httpConnection);
    DiskLruCache.Editor editor = null;
    try {
        editor = cache.edit(uriToKey(uri));
        if (editor == null) {
            return null;
        }
        entry.writeTo(editor);
        return new CacheRequestImpl(editor);
    } catch (IOException e) {
        abortQuietly(editor);
        return null;
    }
}
 
源代码14 项目: bluemix-parking-meter   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}
 
源代码15 项目: phonegapbootcampsite   文件: HttpResponseCache.java
@Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException {
  if (!(urlConnection instanceof HttpURLConnection)) {
    return null;
  }

  HttpURLConnection httpConnection = (HttpURLConnection) urlConnection;
  String requestMethod = httpConnection.getRequestMethod();

  if (maybeRemove(requestMethod, uri)) {
    return null;
  }
  if (!requestMethod.equals("GET")) {
    // Don't cache non-GET responses. We're technically allowed to cache
    // HEAD requests and some POST requests, but the complexity of doing
    // so is high and the benefit is low.
    return null;
  }

  HttpEngine httpEngine = getHttpEngine(httpConnection);
  if (httpEngine == null) {
    // Don't cache unless the HTTP implementation is ours.
    return null;
  }

  ResponseHeaders response = httpEngine.getResponseHeaders();
  if (response.hasVaryAll()) {
    return null;
  }

  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Editor editor = null;
  try {
    editor = cache.edit(uriToKey(uri));
    if (editor == null) {
      return null;
    }
    entry.writeTo(editor);
    return new CacheRequestImpl(editor);
  } catch (IOException e) {
    abortQuietly(editor);
    return null;
  }
}
 
@Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException {
  if (!(urlConnection instanceof HttpURLConnection)) {
    return null;
  }

  HttpURLConnection httpConnection = (HttpURLConnection) urlConnection;
  String requestMethod = httpConnection.getRequestMethod();

  if (maybeRemove(requestMethod, uri)) {
    return null;
  }
  if (!requestMethod.equals("GET")) {
    // Don't cache non-GET responses. We're technically allowed to cache
    // HEAD requests and some POST requests, but the complexity of doing
    // so is high and the benefit is low.
    return null;
  }

  HttpEngine httpEngine = getHttpEngine(httpConnection);
  if (httpEngine == null) {
    // Don't cache unless the HTTP implementation is ours.
    return null;
  }

  ResponseHeaders response = httpEngine.getResponseHeaders();
  if (response.hasVaryAll()) {
    return null;
  }

  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Editor editor = null;
  try {
    editor = cache.edit(uriToKey(uri));
    if (editor == null) {
      return null;
    }
    entry.writeTo(editor);
    return new CacheRequestImpl(editor);
  } catch (IOException e) {
    abortQuietly(editor);
    return null;
  }
}
 
源代码17 项目: phonegapbootcampsite   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}
 
源代码18 项目: reader   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}
 
@Override public CacheRequest put(URI uri, URLConnection urlConnection) throws IOException {
  if (!(urlConnection instanceof HttpURLConnection)) {
    return null;
  }

  HttpURLConnection httpConnection = (HttpURLConnection) urlConnection;
  String requestMethod = httpConnection.getRequestMethod();
  String key = uriToKey(uri);

  if (requestMethod.equals("POST") || requestMethod.equals("PUT") || requestMethod.equals(
      "DELETE")) {
    try {
      cache.remove(key);
    } catch (IOException ignored) {
      // The cache cannot be written.
    }
    return null;
  } else if (!requestMethod.equals("GET")) {
    // Don't cache non-GET responses. We're technically allowed to cache
    // HEAD requests and some POST requests, but the complexity of doing
    // so is high and the benefit is low.
    return null;
  }

  HttpEngine httpEngine = getHttpEngine(httpConnection);
  if (httpEngine == null) {
    // Don't cache unless the HTTP implementation is ours.
    return null;
  }

  ResponseHeaders response = httpEngine.getResponseHeaders();
  if (response.hasVaryAll()) {
    return null;
  }

  RawHeaders varyHeaders =
      httpEngine.getRequestHeaders().getHeaders().getAll(response.getVaryFields());
  Entry entry = new Entry(uri, varyHeaders, httpConnection);
  DiskLruCache.Editor editor = null;
  try {
    editor = cache.edit(key);
    if (editor == null) {
      return null;
    }
    entry.writeTo(editor);
    return new CacheRequestImpl(editor);
  } catch (IOException e) {
    abortQuietly(editor);
    return null;
  }
}
 
源代码20 项目: CordovaYoutubeVideoPlayer   文件: Job.java
private Response execute() throws IOException {
  Connection connection = null;
  Response redirectedBy = null;

  while (true) {
    HttpEngine engine = newEngine(connection);

    Request.Body body = request.body();
    if (body != null) {
      MediaType contentType = body.contentType();
      if (contentType == null) throw new IllegalStateException("contentType == null");
      if (engine.getRequestHeaders().getContentType() == null) {
        engine.getRequestHeaders().setContentType(contentType.toString());
      }
    }

    engine.sendRequest();

    if (body != null) {
      body.writeTo(engine.getRequestBody());
    }

    engine.readResponse();

    int responseCode = engine.getResponseCode();
    Dispatcher.RealResponseBody responseBody = new Dispatcher.RealResponseBody(
        engine.getResponseHeaders(), engine.getResponseBody());

    Response response = new Response.Builder(request, responseCode)
        .rawHeaders(engine.getResponseHeaders().getHeaders())
        .body(responseBody)
        .redirectedBy(redirectedBy)
        .build();

    Request redirect = processResponse(engine, response);

    if (redirect == null) {
      engine.automaticallyReleaseConnectionToPool();
      return response;
    }

    // TODO: fail if too many redirects
    // TODO: fail if not following redirects
    // TODO: release engine

    connection = sameConnection(request, redirect) ? engine.getConnection() : null;
    redirectedBy = response;
    request = redirect;
  }
}