Example usage for org.apache.http.cookie CookieSpec match

List of usage examples for org.apache.http.cookie CookieSpec match

Introduction

In this page you can find the example usage for org.apache.http.cookie CookieSpec match.

Prototype

boolean match(Cookie cookie, CookieOrigin origin);

Source Link

Document

Determines if a Cookie matches the target location.

Usage

From source file:com.gargoylesoftware.htmlunit.WebClient.java

/**
 * Returns the currently configured cookies applicable to the specified URL, in an unmodifiable set.
 * If disabled, this returns an empty set.
 * @param url the URL on which to filter the returned cookies
 * @return the currently configured cookies applicable to the specified URL, in an unmodifiable set
 *///w w  w  .  j av a2  s .c o m
public synchronized Set<Cookie> getCookies(final URL url) {
    final CookieManager cookieManager = getCookieManager();

    if (!cookieManager.isCookiesEnabled()) {
        return Collections.<Cookie>emptySet();
    }

    final URL normalizedUrl = cookieManager.replaceForCookieIfNecessary(url);

    final String host = normalizedUrl.getHost();
    // URLs like "about:blank" don't have cookies and we need to catch these
    // cases here before HttpClient complains
    if (host.isEmpty()) {
        return Collections.emptySet();
    }

    final String path = normalizedUrl.getPath();
    final String protocol = normalizedUrl.getProtocol();
    final boolean secure = "https".equals(protocol);

    final int port = cookieManager.getPort(normalizedUrl);

    // discard expired cookies
    cookieManager.clearExpired(new Date());

    final List<org.apache.http.cookie.Cookie> all = Cookie.toHttpClient(cookieManager.getCookies());
    final List<org.apache.http.cookie.Cookie> matches = new ArrayList<>();

    if (all.size() > 0) {
        final CookieOrigin cookieOrigin = new CookieOrigin(host, port, path, secure);
        final CookieSpec cookieSpec = new HtmlUnitBrowserCompatCookieSpec(getBrowserVersion());
        for (final org.apache.http.cookie.Cookie cookie : all) {
            if (cookieSpec.match(cookie, cookieOrigin)) {
                matches.add(cookie);
            }
        }
    }

    final Set<Cookie> cookies = new LinkedHashSet<>();
    cookies.addAll(Cookie.fromHttpClient(matches));
    return Collections.unmodifiableSet(cookies);
}

From source file:org.apache.http.client.protocol.RequestAddCookies.java

public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
    Args.notNull(request, "HTTP request");
    Args.notNull(context, "HTTP context");

    final String method = request.getRequestLine().getMethod();
    if (method.equalsIgnoreCase("CONNECT")) {
        return;//from  w w w .  ja va 2s .c o  m
    }

    final HttpClientContext clientContext = HttpClientContext.adapt(context);

    // Obtain cookie store
    final CookieStore cookieStore = clientContext.getCookieStore();
    if (cookieStore == null) {
        this.log.debug("Cookie store not specified in HTTP context");
        return;
    }

    // Obtain the registry of cookie specs
    final Lookup<CookieSpecProvider> registry = clientContext.getCookieSpecRegistry();
    if (registry == null) {
        this.log.debug("CookieSpec registry not specified in HTTP context");
        return;
    }

    // Obtain the target host, possibly virtual (required)
    final HttpHost targetHost = clientContext.getTargetHost();
    if (targetHost == null) {
        this.log.debug("Target host not set in the context");
        return;
    }

    // Obtain the route (required)
    final RouteInfo route = clientContext.getHttpRoute();
    if (route == null) {
        this.log.debug("Connection route not set in the context");
        return;
    }

    final RequestConfig config = clientContext.getRequestConfig();
    String policy = config.getCookieSpec();
    if (policy == null) {
        policy = CookieSpecs.BEST_MATCH;
    }
    if (this.log.isDebugEnabled()) {
        this.log.debug("CookieSpec selected: " + policy);
    }

    URI requestURI = null;
    if (request instanceof HttpUriRequest) {
        requestURI = ((HttpUriRequest) request).getURI();
    } else {
        try {
            requestURI = new URI(request.getRequestLine().getUri());
        } catch (final URISyntaxException ignore) {
        }
    }
    final String path = requestURI != null ? requestURI.getPath() : null;
    final String hostName = targetHost.getHostName();
    int port = targetHost.getPort();
    if (port < 0) {
        port = route.getTargetHost().getPort();
    }

    final CookieOrigin cookieOrigin = new CookieOrigin(hostName, port >= 0 ? port : 0,
            !TextUtils.isEmpty(path) ? path : "/", route.isSecure());

    // Get an instance of the selected cookie policy
    final CookieSpecProvider provider = registry.lookup(policy);
    if (provider == null) {
        throw new HttpException("Unsupported cookie policy: " + policy);
    }
    final CookieSpec cookieSpec = provider.create(clientContext);
    // Get all cookies available in the HTTP state
    final List<Cookie> cookies = new ArrayList<Cookie>(cookieStore.getCookies());
    // Find cookies matching the given origin
    final List<Cookie> matchedCookies = new ArrayList<Cookie>();
    final Date now = new Date();
    for (final Cookie cookie : cookies) {
        if (!cookie.isExpired(now)) {
            if (cookieSpec.match(cookie, cookieOrigin)) {
                if (this.log.isDebugEnabled()) {
                    this.log.debug("Cookie " + cookie + " match " + cookieOrigin);
                }
                matchedCookies.add(cookie);
            }
        } else {
            if (this.log.isDebugEnabled()) {
                this.log.debug("Cookie " + cookie + " expired");
            }
        }
    }
    // Generate Cookie request headers
    if (!matchedCookies.isEmpty()) {
        final List<Header> headers = cookieSpec.formatCookies(matchedCookies);
        for (final Header header : headers) {
            request.addHeader(header);
        }
    }

    final int ver = cookieSpec.getVersion();
    if (ver > 0) {
        boolean needVersionHeader = false;
        for (final Cookie cookie : matchedCookies) {
            if (ver != cookie.getVersion() || !(cookie instanceof SetCookie2)) {
                needVersionHeader = true;
            }
        }

        if (needVersionHeader) {
            final 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(HttpClientContext.COOKIE_SPEC, cookieSpec);
    context.setAttribute(HttpClientContext.COOKIE_ORIGIN, cookieOrigin);
}