use of io.netty.handler.codec.http.cookie.Cookie in project async-http-client by AsyncHttpClient.
the class RequestBuilderTest method testAddOrReplaceCookies.
public void testAddOrReplaceCookies() {
RequestBuilder requestBuilder = new RequestBuilder();
Cookie cookie = new DefaultCookie("name", "value");
cookie.setDomain("google.com");
cookie.setPath("/");
cookie.setMaxAge(1000);
cookie.setSecure(true);
cookie.setHttpOnly(true);
requestBuilder.addOrReplaceCookie(cookie);
assertEquals(requestBuilder.cookies.size(), 1, "cookies size should be 1 after adding one cookie");
assertEquals(requestBuilder.cookies.get(0), cookie, "cookie does not match");
Cookie cookie2 = new DefaultCookie("name", "value");
cookie2.setDomain("google2.com");
cookie2.setPath("/path");
cookie2.setMaxAge(1001);
cookie2.setSecure(false);
cookie2.setHttpOnly(false);
requestBuilder.addOrReplaceCookie(cookie2);
assertEquals(requestBuilder.cookies.size(), 1, "cookies size should remain 1 as we just replaced a cookie with same name");
assertEquals(requestBuilder.cookies.get(0), cookie2, "cookie does not match");
Cookie cookie3 = new DefaultCookie("name", "value");
cookie3.setDomain("google.com");
cookie3.setPath("/");
cookie3.setMaxAge(1000);
cookie3.setSecure(true);
cookie3.setHttpOnly(true);
requestBuilder.addOrReplaceCookie(cookie3);
assertEquals(requestBuilder.cookies.size(), 2, "cookie size must be 2 after adding 1 more cookie i.e. cookie3");
}
use of io.netty.handler.codec.http.cookie.Cookie in project async-http-client by AsyncHttpClient.
the class BasicHttpTest method getWithCookies.
@Test
public void getWithCookies() throws Throwable {
withClient().run(client -> {
withServer(server).run(server -> {
final Cookie coo = new DefaultCookie("foo", "value");
coo.setDomain("/");
coo.setPath("/");
server.enqueueEcho();
client.prepareGet(getTargetUrl()).addCookie(coo).execute(new AsyncCompletionHandlerAdapter() {
@Override
public Response onCompleted(Response response) throws Exception {
assertEquals(response.getStatusCode(), 200);
List<Cookie> cookies = response.getCookies();
assertEquals(cookies.size(), 1);
assertEquals(cookies.get(0).toString(), "foo=value");
return response;
}
}).get(TIMEOUT, SECONDS);
});
});
}
use of io.netty.handler.codec.http.cookie.Cookie in project async-http-client by AsyncHttpClient.
the class RequestBuilderBase method build.
public Request build() {
RequestBuilderBase<?> rb = executeSignatureCalculator();
Uri finalUri = rb.computeUri();
Charset finalCharset = rb.computeCharset();
// make copies of mutable internal collections
List<Cookie> cookiesCopy = rb.cookies == null ? Collections.emptyList() : new ArrayList<>(rb.cookies);
List<Param> formParamsCopy = rb.formParams == null ? Collections.emptyList() : new ArrayList<>(rb.formParams);
List<Part> bodyPartsCopy = rb.bodyParts == null ? Collections.emptyList() : new ArrayList<>(rb.bodyParts);
return new //
DefaultRequest(//
rb.method, //
finalUri, //
rb.address, //
rb.localAddress, //
rb.headers, //
cookiesCopy, //
rb.byteData, //
rb.compositeByteData, //
rb.stringData, //
rb.byteBufferData, //
rb.streamData, //
rb.bodyGenerator, //
formParamsCopy, //
bodyPartsCopy, //
rb.virtualHost, //
rb.proxyServer, //
rb.realm, //
rb.file, //
rb.followRedirect, //
rb.requestTimeout, //
rb.readTimeout, //
rb.rangeOffset, //
finalCharset, //
rb.channelPoolPartitioning, rb.nameResolver);
}
use of io.netty.handler.codec.http.cookie.Cookie in project async-http-client by AsyncHttpClient.
the class RequestBuilderBase method addOrReplaceCookie.
public T addOrReplaceCookie(Cookie cookie) {
String cookieKey = cookie.name();
boolean replace = false;
int index = 0;
lazyInitCookies();
for (Cookie c : this.cookies) {
if (c.name().equals(cookieKey)) {
replace = true;
break;
}
index++;
}
if (replace)
this.cookies.set(index, cookie);
else
this.cookies.add(cookie);
return asDerivedType();
}
use of io.netty.handler.codec.http.cookie.Cookie in project async-http-client by AsyncHttpClient.
the class Redirect30xInterceptor method exitAfterHandlingRedirect.
public //
boolean exitAfterHandlingRedirect(//
Channel channel, //
NettyResponseFuture<?> future, //
HttpResponse response, //
Request request, //
int statusCode, Realm realm) throws Exception {
if (followRedirect(config, request)) {
if (future.incrementAndGetCurrentRedirectCount() >= config.getMaxRedirects()) {
throw maxRedirectException;
} else {
// We must allow auth handling again.
future.setInAuth(false);
future.setInProxyAuth(false);
String originalMethod = request.getMethod();
boolean switchToGet = !originalMethod.equals(GET) && (statusCode == MOVED_PERMANENTLY_301 || statusCode == SEE_OTHER_303 || (statusCode == FOUND_302 && !config.isStrict302Handling()));
boolean keepBody = statusCode == TEMPORARY_REDIRECT_307 || (statusCode == FOUND_302 && config.isStrict302Handling());
final RequestBuilder requestBuilder = //
new RequestBuilder(switchToGet ? GET : originalMethod).setCookies(//
request.getCookies()).setChannelPoolPartitioning(//
request.getChannelPoolPartitioning()).setFollowRedirect(//
true).setLocalAddress(//
request.getLocalAddress()).setNameResolver(//
request.getNameResolver()).setProxyServer(//
request.getProxyServer()).setRealm(//
request.getRealm()).setRequestTimeout(request.getRequestTimeout());
if (keepBody) {
requestBuilder.setCharset(request.getCharset());
if (isNonEmpty(request.getFormParams()))
requestBuilder.setFormParams(request.getFormParams());
else if (request.getStringData() != null)
requestBuilder.setBody(request.getStringData());
else if (request.getByteData() != null)
requestBuilder.setBody(request.getByteData());
else if (request.getByteBufferData() != null)
requestBuilder.setBody(request.getByteBufferData());
else if (request.getBodyGenerator() != null)
requestBuilder.setBody(request.getBodyGenerator());
}
requestBuilder.setHeaders(propagatedHeaders(request, realm, keepBody));
// in case of a redirect from HTTP to HTTPS, future
// attributes might change
final boolean initialConnectionKeepAlive = future.isKeepAlive();
final Object initialPartitionKey = future.getPartitionKey();
HttpHeaders responseHeaders = response.headers();
String location = responseHeaders.get(LOCATION);
Uri newUri = Uri.create(future.getUri(), location);
LOGGER.debug("Redirecting to {}", newUri);
for (String cookieStr : responseHeaders.getAll(SET_COOKIE)) {
Cookie c = ClientCookieDecoder.STRICT.decode(cookieStr);
if (c != null)
requestBuilder.addOrReplaceCookie(c);
}
boolean sameBase = isSameBase(request.getUri(), newUri);
if (sameBase) {
// we can only assume the virtual host is still valid if the baseUrl is the same
requestBuilder.setVirtualHost(request.getVirtualHost());
}
final Request nextRequest = requestBuilder.setUri(newUri).build();
future.setTargetRequest(nextRequest);
LOGGER.debug("Sending redirect to {}", newUri);
if (future.isKeepAlive() && !HttpUtil.isTransferEncodingChunked(response)) {
if (sameBase) {
future.setReuseChannel(true);
// we can't directly send the next request because we still have to received LastContent
requestSender.drainChannelAndExecuteNextRequest(channel, future, nextRequest);
} else {
channelManager.drainChannelAndOffer(channel, future, initialConnectionKeepAlive, initialPartitionKey);
requestSender.sendNextRequest(nextRequest, future);
}
} else {
// redirect + chunking = WAT
channelManager.closeChannel(channel);
requestSender.sendNextRequest(nextRequest, future);
}
return true;
}
}
return false;
}
Aggregations