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);
   }
 }
예제 #2
0
 /**
  * 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;
 }