Search in sources :

Example 41 with Cookie

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");
}
Also used : Cookie(io.netty.handler.codec.http.cookie.Cookie) DefaultCookie(io.netty.handler.codec.http.cookie.DefaultCookie) DefaultCookie(io.netty.handler.codec.http.cookie.DefaultCookie)

Example 42 with Cookie

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);
        });
    });
}
Also used : Cookie(io.netty.handler.codec.http.cookie.Cookie) DefaultCookie(io.netty.handler.codec.http.cookie.DefaultCookie) HttpServletResponse(javax.servlet.http.HttpServletResponse) DefaultCookie(io.netty.handler.codec.http.cookie.DefaultCookie) AsyncCompletionHandlerAdapter(org.asynchttpclient.test.TestUtils.AsyncCompletionHandlerAdapter) Test(org.testng.annotations.Test) HttpTest(org.asynchttpclient.testserver.HttpTest)

Example 43 with Cookie

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);
}
Also used : Cookie(io.netty.handler.codec.http.cookie.Cookie) Part(org.asynchttpclient.request.body.multipart.Part) Charset(java.nio.charset.Charset) Uri(org.asynchttpclient.uri.Uri)

Example 44 with Cookie

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();
}
Also used : Cookie(io.netty.handler.codec.http.cookie.Cookie)

Example 45 with Cookie

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;
}
Also used : Cookie(io.netty.handler.codec.http.cookie.Cookie) HttpHeaders(io.netty.handler.codec.http.HttpHeaders) RequestBuilder(org.asynchttpclient.RequestBuilder) Request(org.asynchttpclient.Request) Uri(org.asynchttpclient.uri.Uri)

Aggregations

Cookie (io.netty.handler.codec.http.cookie.Cookie)45 DefaultCookie (io.netty.handler.codec.http.cookie.DefaultCookie)21 Test (org.junit.Test)19 DefaultHttpHeaders (io.netty.handler.codec.http.DefaultHttpHeaders)15 HttpHeaders (io.netty.handler.codec.http.HttpHeaders)12 Charset (java.nio.charset.Charset)9 FullHttpRequest (io.netty.handler.codec.http.FullHttpRequest)6 Test (org.testng.annotations.Test)5 HttpRequest (io.netty.handler.codec.http.HttpRequest)4 ByteBuf (io.netty.buffer.ByteBuf)3 LastHttpContent (io.netty.handler.codec.http.LastHttpContent)3 HttpResponseHeaders (org.asynchttpclient.HttpResponseHeaders)3 DataProvider (com.tngtech.java.junit.dataprovider.DataProvider)2 DefaultFullHttpResponse (io.netty.handler.codec.http.DefaultFullHttpResponse)2 FullHttpResponse (io.netty.handler.codec.http.FullHttpResponse)2 HttpContent (io.netty.handler.codec.http.HttpContent)2 QueryStringDecoder (io.netty.handler.codec.http.QueryStringDecoder)2 HashSet (java.util.HashSet)2 List (java.util.List)2 Uri (org.asynchttpclient.uri.Uri)2