Fix HTTPCLIENT-2331: Skip cookie header generation if a Cookie header is already present (#561)
This fix ensures that if a Cookie header is already present in the request, HttpClient skips adding additional Cookie headers from the BasicCookieStore.
This commit is contained in:
parent
4c42c70a51
commit
336263da6c
|
@ -45,6 +45,7 @@ import org.apache.hc.core5.annotation.ThreadingBehavior;
|
|||
import org.apache.hc.core5.http.EntityDetails;
|
||||
import org.apache.hc.core5.http.Header;
|
||||
import org.apache.hc.core5.http.HttpException;
|
||||
import org.apache.hc.core5.http.HttpHeaders;
|
||||
import org.apache.hc.core5.http.HttpRequest;
|
||||
import org.apache.hc.core5.http.HttpRequestInterceptor;
|
||||
import org.apache.hc.core5.http.Method;
|
||||
|
@ -90,6 +91,17 @@ public class RequestAddCookies implements HttpRequestInterceptor {
|
|||
return;
|
||||
}
|
||||
|
||||
final Header cookieHeader = request.getHeader(HttpHeaders.COOKIE);
|
||||
// Check if a Cookie header is already present
|
||||
if (cookieHeader != null) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Skipping cookie addition, Cookie header already present in the request");
|
||||
}
|
||||
// Skip adding cookies if the Cookie header is already present
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
final HttpClientContext clientContext = HttpClientContext.cast(context);
|
||||
final String exchangeId = clientContext.getExchangeId();
|
||||
|
||||
|
|
|
@ -410,4 +410,27 @@ public class TestRequestAddCookies {
|
|||
Assertions.assertEquals("name1=value; name2=value; name3=value", headers1[0].getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipAddingCookiesWhenCookieHeaderPresent() throws Exception {
|
||||
// Prepare a request with an existing Cookie header
|
||||
final HttpRequest request = new BasicHttpRequest("GET", "/");
|
||||
request.addHeader("Cookie", "existingCookie=existingValue");
|
||||
|
||||
final HttpRoute route = new HttpRoute(this.target, null, false);
|
||||
|
||||
final HttpClientContext context = HttpClientContext.create();
|
||||
context.setRoute(route);
|
||||
context.setCookieStore(this.cookieStore);
|
||||
context.setCookieSpecRegistry(this.cookieSpecRegistry);
|
||||
|
||||
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
|
||||
interceptor.process(request, null, context);
|
||||
|
||||
// Check that no additional cookies were added
|
||||
final Header[] headers = request.getHeaders("Cookie");
|
||||
Assertions.assertNotNull(headers);
|
||||
Assertions.assertEquals(1, headers.length);
|
||||
Assertions.assertEquals("existingCookie=existingValue", headers[0].getValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue