Search in sources :

Example 1 with CookieOrigin

use of org.apache.http.cookie.CookieOrigin in project robovm by robovm.

the class RequestAddCookies method process.

public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
    if (request == null) {
        throw new IllegalArgumentException("HTTP request may not be null");
    }
    if (context == null) {
        throw new IllegalArgumentException("HTTP context may not be null");
    }
    // Obtain cookie store
    CookieStore cookieStore = (CookieStore) context.getAttribute(ClientContext.COOKIE_STORE);
    if (cookieStore == null) {
        this.log.info("Cookie store not available in HTTP context");
        return;
    }
    // Obtain the registry of cookie specs
    CookieSpecRegistry registry = (CookieSpecRegistry) context.getAttribute(ClientContext.COOKIESPEC_REGISTRY);
    if (registry == null) {
        this.log.info("CookieSpec registry not available in HTTP context");
        return;
    }
    // Obtain the target host (required)
    HttpHost targetHost = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
    if (targetHost == null) {
        throw new IllegalStateException("Target host not specified in HTTP context");
    }
    // Obtain the client connection (required)
    ManagedClientConnection conn = (ManagedClientConnection) context.getAttribute(ExecutionContext.HTTP_CONNECTION);
    if (conn == null) {
        throw new IllegalStateException("Client connection not specified in HTTP context");
    }
    String policy = HttpClientParams.getCookiePolicy(request.getParams());
    if (this.log.isDebugEnabled()) {
        this.log.debug("CookieSpec selected: " + policy);
    }
    URI requestURI;
    if (request instanceof HttpUriRequest) {
        requestURI = ((HttpUriRequest) request).getURI();
    } else {
        try {
            requestURI = new URI(request.getRequestLine().getUri());
        } catch (URISyntaxException ex) {
            throw new ProtocolException("Invalid request URI: " + request.getRequestLine().getUri(), ex);
        }
    }
    String hostName = targetHost.getHostName();
    int port = targetHost.getPort();
    if (port < 0) {
        port = conn.getRemotePort();
    }
    CookieOrigin cookieOrigin = new CookieOrigin(hostName, port, requestURI.getPath(), conn.isSecure());
    // Get an instance of the selected cookie policy
    CookieSpec cookieSpec = registry.getCookieSpec(policy, request.getParams());
    // Get all cookies available in the HTTP state
    List<Cookie> cookies = new ArrayList<Cookie>(cookieStore.getCookies());
    // Find cookies matching the given origin
    List<Cookie> matchedCookies = new ArrayList<Cookie>();
    for (Cookie cookie : cookies) {
        if (cookieSpec.match(cookie, cookieOrigin)) {
            if (this.log.isDebugEnabled()) {
                this.log.debug("Cookie " + cookie + " match " + cookieOrigin);
            }
            matchedCookies.add(cookie);
        }
    }
    // Generate Cookie request headers
    if (!matchedCookies.isEmpty()) {
        List<Header> headers = cookieSpec.formatCookies(matchedCookies);
        for (Header header : headers) {
            request.addHeader(header);
        }
    }
    int ver = cookieSpec.getVersion();
    if (ver > 0) {
        boolean needVersionHeader = false;
        for (Cookie cookie : matchedCookies) {
            if (ver != cookie.getVersion()) {
                needVersionHeader = true;
            }
        }
        if (needVersionHeader) {
            Header header = cookieSpec.getVersionHeader();
            if (header != null) {
                // Advertise cookie version support
                request.addHeader(header);
            }
        }
    }
    // Stick the CookieSpec and CookieOrigin instances to the HTTP context
    // so they could be obtained by the response interceptor
    context.setAttribute(ClientContext.COOKIE_SPEC, cookieSpec);
    context.setAttribute(ClientContext.COOKIE_ORIGIN, cookieOrigin);
}
Also used : HttpUriRequest(org.apache.http.client.methods.HttpUriRequest) Cookie(org.apache.http.cookie.Cookie) ProtocolException(org.apache.http.ProtocolException) ManagedClientConnection(org.apache.http.conn.ManagedClientConnection) ArrayList(java.util.ArrayList) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) CookieStore(org.apache.http.client.CookieStore) Header(org.apache.http.Header) HttpHost(org.apache.http.HttpHost) CookieSpec(org.apache.http.cookie.CookieSpec) CookieOrigin(org.apache.http.cookie.CookieOrigin) CookieSpecRegistry(org.apache.http.cookie.CookieSpecRegistry)

Example 2 with CookieOrigin

use of org.apache.http.cookie.CookieOrigin in project robovm by robovm.

the class ResponseProcessCookies method process.

public void process(final HttpResponse response, final HttpContext context) throws HttpException, IOException {
    if (response == null) {
        throw new IllegalArgumentException("HTTP request may not be null");
    }
    if (context == null) {
        throw new IllegalArgumentException("HTTP context may not be null");
    }
    // Obtain cookie store
    CookieStore cookieStore = (CookieStore) context.getAttribute(ClientContext.COOKIE_STORE);
    if (cookieStore == null) {
        this.log.info("Cookie store not available in HTTP context");
        return;
    }
    // Obtain actual CookieSpec instance
    CookieSpec cookieSpec = (CookieSpec) context.getAttribute(ClientContext.COOKIE_SPEC);
    if (cookieSpec == null) {
        this.log.info("CookieSpec not available in HTTP context");
        return;
    }
    // Obtain actual CookieOrigin instance
    CookieOrigin cookieOrigin = (CookieOrigin) context.getAttribute(ClientContext.COOKIE_ORIGIN);
    if (cookieOrigin == null) {
        this.log.info("CookieOrigin not available in HTTP context");
        return;
    }
    HeaderIterator it = response.headerIterator(SM.SET_COOKIE);
    processCookies(it, cookieSpec, cookieOrigin, cookieStore);
    // see if the cookie spec supports cookie versioning.
    if (cookieSpec.getVersion() > 0) {
        // process set-cookie2 headers.
        // Cookie2 will replace equivalent Cookie instances
        it = response.headerIterator(SM.SET_COOKIE2);
        processCookies(it, cookieSpec, cookieOrigin, cookieStore);
    }
}
Also used : CookieStore(org.apache.http.client.CookieStore) CookieSpec(org.apache.http.cookie.CookieSpec) HeaderIterator(org.apache.http.HeaderIterator) CookieOrigin(org.apache.http.cookie.CookieOrigin)

Example 3 with CookieOrigin

use of org.apache.http.cookie.CookieOrigin in project jmeter by apache.

the class HC4CookieHandler method addCookieFromHeader.

@Override
public void addCookieFromHeader(CookieManager cookieManager, boolean checkCookies, String cookieHeader, URL url) {
    boolean debugEnabled = log.isDebugEnabled();
    if (debugEnabled) {
        log.debug("Received Cookie: " + cookieHeader + " From: " + url.toExternalForm());
    }
    String protocol = url.getProtocol();
    String host = url.getHost();
    int port = HTTPSamplerBase.getDefaultPort(protocol, url.getPort());
    String path = url.getPath();
    boolean isSecure = HTTPSamplerBase.isSecure(protocol);
    List<org.apache.http.cookie.Cookie> cookies = null;
    CookieOrigin cookieOrigin = new CookieOrigin(host, port, path, isSecure);
    BasicHeader basicHeader = new BasicHeader(HTTPConstants.HEADER_SET_COOKIE, cookieHeader);
    try {
        cookies = cookieSpec.parse(basicHeader, cookieOrigin);
    } catch (MalformedCookieException e) {
        log.error("Unable to add the cookie", e);
    }
    if (cookies == null) {
        return;
    }
    for (org.apache.http.cookie.Cookie cookie : cookies) {
        try {
            if (checkCookies) {
                cookieSpec.validate(cookie, cookieOrigin);
            }
            Date expiryDate = cookie.getExpiryDate();
            long exp = 0;
            if (expiryDate != null) {
                exp = expiryDate.getTime();
            }
            Cookie newCookie = new Cookie(cookie.getName(), cookie.getValue(), cookie.getDomain(), cookie.getPath(), cookie.isSecure(), exp / 1000, ((BasicClientCookie) cookie).containsAttribute(ClientCookie.PATH_ATTR), ((BasicClientCookie) cookie).containsAttribute(ClientCookie.DOMAIN_ATTR), cookie.getVersion());
            // Store session cookies as well as unexpired ones
            if (exp == 0 || exp >= System.currentTimeMillis()) {
                // Has its own debug log; removes matching cookies
                cookieManager.add(newCookie);
            } else {
                cookieManager.removeMatchingCookies(newCookie);
                if (debugEnabled) {
                    log.info("Dropping expired Cookie: " + newCookie.toString());
                }
            }
        } catch (MalformedCookieException e) {
            // This means the cookie was wrong for the URL
            log.warn("Not storing invalid cookie: <" + cookieHeader + "> for URL " + url + " (" + e.getLocalizedMessage() + ")");
        } catch (IllegalArgumentException e) {
            log.warn(cookieHeader + e.getLocalizedMessage());
        }
    }
}
Also used : ClientCookie(org.apache.http.cookie.ClientCookie) BasicClientCookie(org.apache.http.impl.cookie.BasicClientCookie) MalformedCookieException(org.apache.http.cookie.MalformedCookieException) Date(java.util.Date) CookieOrigin(org.apache.http.cookie.CookieOrigin) BasicHeader(org.apache.http.message.BasicHeader)

Example 4 with CookieOrigin

use of org.apache.http.cookie.CookieOrigin in project lucene-solr by apache.

the class SolrPortAwareCookieSpecTest method testDomainValidate1.

@Test
public void testDomainValidate1() throws Exception {
    final BasicClientCookie cookie = new BasicClientCookie("name", "value");
    final CookieOrigin origin = new CookieOrigin("somehost", 80, "/", false);
    final CookieAttributeHandler h = new SolrPortAwareCookieSpecFactory.PortAwareDomainHandler();
    cookie.setDomain("somehost");
    h.validate(cookie, origin);
    cookie.setDomain("otherhost");
    try {
        h.validate(cookie, origin);
        Assert.fail("MalformedCookieException should have been thrown");
    } catch (final MalformedCookieException ex) {
    // expected
    }
}
Also used : CookieAttributeHandler(org.apache.http.cookie.CookieAttributeHandler) MalformedCookieException(org.apache.http.cookie.MalformedCookieException) BasicClientCookie(org.apache.http.impl.cookie.BasicClientCookie) CookieOrigin(org.apache.http.cookie.CookieOrigin) Test(org.junit.Test)

Example 5 with CookieOrigin

use of org.apache.http.cookie.CookieOrigin in project lucene-solr by apache.

the class SolrPortAwareCookieSpecTest method testDomainMatch1.

@Test
public void testDomainMatch1() throws Exception {
    final BasicClientCookie cookie = new BasicClientCookie("name", "value");
    final CookieOrigin origin = new CookieOrigin("www.somedomain.com", 80, "/", false);
    final CookieAttributeHandler h = new SolrPortAwareCookieSpecFactory.PortAwareDomainHandler();
    cookie.setDomain(null);
    Assert.assertFalse(h.match(cookie, origin));
    cookie.setDomain(".somedomain.com");
    Assert.assertTrue(h.match(cookie, origin));
}
Also used : CookieAttributeHandler(org.apache.http.cookie.CookieAttributeHandler) BasicClientCookie(org.apache.http.impl.cookie.BasicClientCookie) CookieOrigin(org.apache.http.cookie.CookieOrigin) Test(org.junit.Test)

Aggregations

CookieOrigin (org.apache.http.cookie.CookieOrigin)16 BasicClientCookie (org.apache.http.impl.cookie.BasicClientCookie)10 CookieAttributeHandler (org.apache.http.cookie.CookieAttributeHandler)8 Test (org.junit.Test)8 CookieStore (org.apache.http.client.CookieStore)6 CookieSpec (org.apache.http.cookie.CookieSpec)6 MalformedCookieException (org.apache.http.cookie.MalformedCookieException)6 ArrayList (java.util.ArrayList)4 URI (java.net.URI)3 URISyntaxException (java.net.URISyntaxException)3 Header (org.apache.http.Header)3 HeaderIterator (org.apache.http.HeaderIterator)3 HttpHost (org.apache.http.HttpHost)3 ProtocolException (org.apache.http.ProtocolException)3 HttpUriRequest (org.apache.http.client.methods.HttpUriRequest)3 ManagedClientConnection (org.apache.http.conn.ManagedClientConnection)3 Cookie (org.apache.http.cookie.Cookie)3 CookieSpecRegistry (org.apache.http.cookie.CookieSpecRegistry)3 ClientCookie (org.apache.http.cookie.ClientCookie)2 Date (java.util.Date)1