From 0ae1a685ebeefda10326698666200b963fb229f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20=C5=BBebrowski?= Date: Wed, 4 May 2011 20:58:24 +0200 Subject: [PATCH] support for cookies on 302 redirect --- .../com/ning/http/client/RequestBuilder.java | 5 +++++ .../ning/http/client/RequestBuilderBase.java | 19 +++++++++++++++++++ .../netty/NettyAsyncHttpProvider.java | 9 +++++++++ 3 files changed, 33 insertions(+) diff --git a/src/main/java/com/ning/http/client/RequestBuilder.java b/src/main/java/com/ning/http/client/RequestBuilder.java index 2c688ecaa5..0f111989fd 100644 --- a/src/main/java/com/ning/http/client/RequestBuilder.java +++ b/src/main/java/com/ning/http/client/RequestBuilder.java @@ -160,4 +160,9 @@ public RequestBuilder setVirtualHost(String virtualHost) { public RequestBuilder setFollowRedirects(boolean followRedirects) { return super.setFollowRedirects(followRedirects); } + + @Override + public RequestBuilder addOrReplaceCookie(Cookie c) { + return super.addOrReplaceCookie(c); + } } diff --git a/src/main/java/com/ning/http/client/RequestBuilderBase.java b/src/main/java/com/ning/http/client/RequestBuilderBase.java index d996021637..79875f5821 100644 --- a/src/main/java/com/ning/http/client/RequestBuilderBase.java +++ b/src/main/java/com/ning/http/client/RequestBuilderBase.java @@ -563,4 +563,23 @@ private boolean allowBody(String method) { return true; } } + + public T addOrReplaceCookie(Cookie cookie) { + String cookieKey=cookie.getName(); + boolean replace=false; + int index=0; + for(Cookie c : request.cookies) { + if(c.getName().equals(cookieKey)){ + replace=true; + break; + }; + index++; + } + if(replace) { + ((ArrayList)request.cookies).set(index, cookie); + } else { + request.cookies.add(cookie); + } + return derived.cast(this); + } } diff --git a/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java b/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java index 96b6054cd0..c72142fe24 100644 --- a/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java +++ b/src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java @@ -1161,6 +1161,15 @@ public Object call() throws Exception { final String newUrl = uri.toString(); log.debug("Redirecting to {}", newUrl); + for(String cookieStr : future.getHttpResponse().getHeaders(HttpHeaders.Names.SET_COOKIE)){ + Cookie c=AsyncHttpProviderUtils.parseCookie(cookieStr); + nBuilder.addOrReplaceCookie(c); + } + for(String cookieStr : future.getHttpResponse().getHeaders(HttpHeaders.Names.SET_COOKIE2)){ + Cookie c=AsyncHttpProviderUtils.parseCookie(cookieStr); + nBuilder.addOrReplaceCookie(c); + } + AsyncCallable ac = new AsyncCallable(future) { public Object call() throws Exception {