Предотвращение HttpClient 4 из следующего перенаправления

Я подключаюсь к моему приложению AppEngine, используя библиотеку Apache HttpComponents. Чтобы аутентифицировать моих пользователей, мне нужно передать токен аутентификации вместе с адресом входа приложения ( http://myapp.appspot.com/_ah/login?auth= … ) И захватить файл cookie из заголовка ответ. Тем не менее, страница входа в систему отвечает кодом состояния переадресации, и я не знаю, как остановить HttpClient от перенаправления, что помешает мне перехватить файл cookie.

Fwiw, фактический метод, который я использую для отправки запроса, приведен ниже.

private void execute(HttpClient client, HttpRequestBase method) { // Set up an error handler BasicHttpResponse errorResponse = new BasicHttpResponse( new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR"); try { // Call HttpClient execute client.execute(method, this.responseHandler); } catch (Exception e) { errorResponse.setReasonPhrase(e.getMessage()); try { this.responseHandler.handleResponse(errorResponse); } catch (Exception ex) { // log and/or handle } } } 

Как я могу остановить клиента после перенаправления?

Благодарю.

Обновление :

В соответствии с приведенным ниже решением я сделал следующее после создания DefaultHttpClient client (и перед его передачей методу execute ):

 if (!this.followRedirect) { client.setRedirectHandler(new RedirectHandler() { public URI getLocationURI(HttpResponse response, HttpContext context) throws ProtocolException { return null; } public boolean isRedirectRequested(HttpResponse response, HttpContext context) { return false; } }); } 

Более подробное, чем кажется, должно быть, но не так сложно, как я думал.

Solutions Collecting From Web of "Предотвращение HttpClient 4 из следующего перенаправления"

Попробуйте использовать RedirectHandler . Для этого может потребоваться расширение DefaultHttpClient для возврата вашей пользовательской реализации из createRedirectHandler() .

Вы можете сделать это с помощью параметров http:

 final HttpParams params = new BasicHttpParams(); HttpClientParams.setRedirecting(params, false); 

Метод не имеет javadoc, но если вы посмотрите на источник, вы увидите, что он устанавливает:

HANDLE_REDIRECTS

Который контролирует:

Определяет, следует ли автоматически обрабатывать переадресацию

С Version 4.3.x HttpClient он непосредственно находится в clientBuilder .

Поэтому, когда вы создаете свой клиент, используйте:

 CloseableHttpClient client = clientBuilder.disableRedirectHandling().build(); 

Я знаю его старый вопрос, но у меня тоже была эта проблема, и я хочу поделиться своим решением.

RedirectHandler, кажется, устарел, мне удалось автоматически отключить последующие ответы на перенаправление, изменив значение по умолчанию RedirectionStrategy для DefaultHttpClient.

 httpClient.setRedirectStrategy(new RedirectStrategy() { @Override public boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException { return false; } @Override public HttpUriRequest getRedirect(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException { return null; } }); 

С другой стороны, это связывает нас с конкретной реализацией HttpClient, но это делает работу.

Представленный быстрый google: http://hc.apache.org/httpclient-3.x/redirects.html