Skip to content

Commit 0ae1a68

Browse files
support for cookies on 302 redirect
1 parent dcbfd5d commit 0ae1a68

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

src/main/java/com/ning/http/client/RequestBuilder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,9 @@ public RequestBuilder setVirtualHost(String virtualHost) {
160160
public RequestBuilder setFollowRedirects(boolean followRedirects) {
161161
return super.setFollowRedirects(followRedirects);
162162
}
163+
164+
@Override
165+
public RequestBuilder addOrReplaceCookie(Cookie c) {
166+
return super.addOrReplaceCookie(c);
167+
}
163168
}

src/main/java/com/ning/http/client/RequestBuilderBase.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,4 +563,23 @@ private boolean allowBody(String method) {
563563
return true;
564564
}
565565
}
566+
567+
public T addOrReplaceCookie(Cookie cookie) {
568+
String cookieKey=cookie.getName();
569+
boolean replace=false;
570+
int index=0;
571+
for(Cookie c : request.cookies) {
572+
if(c.getName().equals(cookieKey)){
573+
replace=true;
574+
break;
575+
};
576+
index++;
577+
}
578+
if(replace) {
579+
((ArrayList<Cookie>)request.cookies).set(index, cookie);
580+
} else {
581+
request.cookies.add(cookie);
582+
}
583+
return derived.cast(this);
584+
}
566585
}

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,15 @@ public Object call() throws Exception {
11611161
final String newUrl = uri.toString();
11621162

11631163
log.debug("Redirecting to {}", newUrl);
1164+
for(String cookieStr : future.getHttpResponse().getHeaders(HttpHeaders.Names.SET_COOKIE)){
1165+
Cookie c=AsyncHttpProviderUtils.parseCookie(cookieStr);
1166+
nBuilder.addOrReplaceCookie(c);
1167+
}
1168+
for(String cookieStr : future.getHttpResponse().getHeaders(HttpHeaders.Names.SET_COOKIE2)){
1169+
Cookie c=AsyncHttpProviderUtils.parseCookie(cookieStr);
1170+
nBuilder.addOrReplaceCookie(c);
1171+
}
1172+
11641173

11651174
AsyncCallable ac = new AsyncCallable(future) {
11661175
public Object call() throws Exception {

0 commit comments

Comments
 (0)