public void processRequestCookie( HttpURLConnection connection, HashMap<String, String> cookieHeaders) { connection.setInstanceFollowRedirects(false); // ----------------------------------------------------------------------------------------------------- // 1、获取所有的Cookie集合 // ----------------------------------------------------------------------------------------------------- CookieStore cookieStore = CookieStoreHandler.getInstance(); List<Cookie> cookies = cookieStore.getCookies(); if (null == cookies || cookies.size() <= 0) { return; } // ----------------------------------------------------------------------------------------------------- // 2、获取CookieOrigin // ----------------------------------------------------------------------------------------------------- CookieOrigin cookieOrigin = getCookieOrigin(connection); // ----------------------------------------------------------------------------------------------------- // 3、过滤符合条件数据,获取符合的Cookie集合 // ----------------------------------------------------------------------------------------------------- CookieSpec cookieSpec = obtainCookieSpec(); final List<Cookie> matchedCookies = new ArrayList<Cookie>(); final Date now = new Date(); boolean expired = false; for (final Cookie cookie : cookies) { if (cookie.isExpired(now)) { // 过期了..,没有设置expire不过期 VolleyLog.v("Cookie " + cookie + " expired"); expired = true; } else { if (cookieSpec.match(cookie, cookieOrigin)) { VolleyLog.v("Cookie " + cookie + " match " + cookieOrigin); matchedCookies.add(cookie); } } } // 有过期的Cookie存在,则去掉所有过期的Cookie if (expired) { cookieStore.clearExpired(now); } // ----------------------------------------------------------------------------------------------------- // 4、将符合条件的Cookie字符串,设置成请求头headers Map中 // ----------------------------------------------------------------------------------------------------- String cookie = cookieSpec.formatCookies(matchedCookies); if (null != cookie && cookie.length() > 0) { cookieHeaders.put("Cookie", cookie); } }
/** * TODO Documentation * * @param url the rest service URL to request * @return the resulting {@link ClientResponse}. If the request fails (HTTP response code NOT 200) * <code>null</code> will be returned. */ private ClientResponse request(final String url) { // Set the cookies if (loginCookies == null) { // TODO throw a real exception here throw new RuntimeException("Please login first"); } // build the request final DefaultClientConfig cc = new DefaultClientConfig(); final Client client = Client.create(cc); final WebResource resource = client.resource(url); final Builder builder = resource.getRequestBuilder(); builder.accept(MediaType.APPLICATION_XML); for (Cookie cookie : loginCookies.getCookies()) { builder.cookie(cookie); } final ClientResponse response = builder.get(ClientResponse.class); if (response.getStatus() != 200) { LOG.warning("Request failed! HTTP response code: " + response.getStatus()); } return response; }