| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
yb25
9年前发布

Java 的 Cookie 处理类

import java.io.IOException;  import java.net.CookieHandler;  import java.net.URI;  import java.net.URL;  import java.net.URLConnection;  import java.text.DateFormat;  import java.text.ParseException;  import java.text.SimpleDateFormat;  import java.util.Collections;  import java.util.Date;  import java.util.HashMap;  import java.util.LinkedList;  import java.util.List;  import java.util.Locale;  import java.util.Map;     public class Fetch5 {    public static void main(String args[]) throws Exception {      String urlString = "java.sun.com";      CookieHandler.setDefault(new ListCookieHandler());      URL url = new URL(urlString);      URLConnection connection = url.openConnection();      Object obj = connection.getContent();      url = new URL(urlString);      connection = url.openConnection();      obj = connection.getContent();    }  }     class ListCookieHandler extends CookieHandler {    private List<Cookie> cookieJar = new LinkedList<Cookie>();       public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException {      List<String> setCookieList = responseHeaders.get("Set-Cookie");      if (setCookieList != null) {        for (String item : setCookieList) {          Cookie cookie = new Cookie(uri, item);          for (Cookie existingCookie : cookieJar) {            if ((cookie.getURI().equals(existingCookie.getURI()))                && (cookie.getName().equals(existingCookie.getName()))) {              cookieJar.remove(existingCookie);              break;            }          }          cookieJar.add(cookie);        }      }    }       public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders)        throws IOException {      StringBuilder cookies = new StringBuilder();      for (Cookie cookie : cookieJar) {        // Remove cookies that have expired        if (cookie.hasExpired()) {          cookieJar.remove(cookie);        } else if (cookie.matches(uri)) {          if (cookies.length() > 0) {            cookies.append(", ");          }          cookies.append(cookie.toString());        }      }         Map<String, List<String>> cookieMap = new HashMap<String, List<String>>(requestHeaders);         if (cookies.length() > 0) {        List<String> list = Collections.singletonList(cookies.toString());        cookieMap.put("Cookie", list);      }      System.out.println("CookieMap: " + cookieMap);      return Collections.unmodifiableMap(cookieMap);    }  }     class Cookie {       String name;       String value;       URI uri;       String domain;       Date expires;       String path;       private static DateFormat expiresFormat1 = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'",        Locale.US);       private static DateFormat expiresFormat2 = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'",        Locale.US);       public Cookie(URI uri, String header) {      String attributes[] = header.split(";");      String nameValue = attributes[0].trim();      this.uri = uri;      this.name = nameValue.substring(0, nameValue.indexOf('='));      this.value = nameValue.substring(nameValue.indexOf('=') + 1);      this.path = "/";      this.domain = uri.getHost();         for (int i = 1; i < attributes.length; i++) {        nameValue = attributes[i].trim();        int equals = nameValue.indexOf('=');        if (equals == -1) {          continue;        }        String name = nameValue.substring(0, equals);        String value = nameValue.substring(equals + 1);        if (name.equalsIgnoreCase("domain")) {          String uriDomain = uri.getHost();          if (uriDomain.equals(value)) {            this.domain = value;          } else {            if (!value.startsWith(".")) {              value = "." + value;            }            uriDomain = uriDomain.substring(uriDomain.indexOf('.'));            if (!uriDomain.equals(value)) {              throw new IllegalArgumentException("Trying to set foreign cookie");            }            this.domain = value;          }        } else if (name.equalsIgnoreCase("path")) {          this.path = value;        } else if (name.equalsIgnoreCase("expires")) {          try {            this.expires = expiresFormat1.parse(value);          } catch (ParseException e) {            try {              this.expires = expiresFormat2.parse(value);            } catch (ParseException e2) {              throw new IllegalArgumentException("Bad date format in header: " + value);            }          }        }      }    }       public boolean hasExpired() {      if (expires == null) {        return false;      }      Date now = new Date();      return now.after(expires);    }       public String getName() {      return name;    }       public URI getURI() {      return uri;    }       public boolean matches(URI uri) {         if (hasExpired()) {        return false;      }      String path = uri.getPath();      if (path == null) {        path = "/";      }         return path.startsWith(this.path);    }       public String toString() {      StringBuilder result = new StringBuilder(name);      result.append("=");      result.append(value);      return result.toString();    }  }