利用HTTP协议获取163的联系人列表(3)

 

五、附录

附录一 163 登录时请求和发送数据包

(1) GET

http://adgeo.163.com/ad_cookies

请求头部

GET /ad_cookies HTTP/1.1

Accept: */*

Referer: http://mail.163.com/

Accept-Language: zh-cn,en-US;q=0.5

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; CIBA)

Host: adgeo.163.com

Connection: Keep-Alive

 

应答头部

HTTP/1.1 200 OK

Server: nginx/ 0.7.24

Date: Tue, 02 Dec 2008 06:40:45 GMT

Content-Type: text/plain

Content-Length: 0

Connection: close

Cache-Control: no-cache

P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"

Set-Cookie: Province=025; Expires=Tue, 16 Dec 2008 06:40:45 GMT; Path=/; Domain=.163.com

 

(2) POST

https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1

 

请求头部

POST /logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1 HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, */*

Referer: http://mail.163.com/

Accept-Language: zh-cn,en-US;q=0.5

Content-Type: application/x-www-form-urlencoded

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; CIBA)

Host: reg.163.com

Content-Length: 131

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: Province=025; ntes_mail_firstpage=normal

 

请求体

verifycookie=1&style=-1&product=mail163&username=xjtujay&password=jinjian&selType=-1&remUser=on&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=

 

应答头部

HTTP/1.1 200 OK

Date: Tue, 02 Dec 2008 06:40:56 GMT

Server: Apache

Cache-Control: max-age=0

Expires: Tue, 02 Dec 2008 06:40:56 GMT

Pragma: No-cache

Cache-Control: no-cache

Expires: Thu, 01 Jan 1970 00:00:00 GMT

Content-Length: 2575

Set-Cookie: NTES_SESS=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF; domain=.163.com; path=/

Set-Cookie: NETEASE_SSN=xjtujay; domain=.163.com; path=/; expires=Wed, 02-Dec-2009 06:40:54 GMT

Set-Cookie: NETEASE_ADV=11&23&1228200054655; domain=.163.com; path=/; expires=Wed, 02-Dec-2009 06:40:54 GMT

Set-Cookie: URSJESSIONID=aGHZvw0enBrb; path=/

Connection: close

Content-Type: text/html; charset=UTF-8

 

应答内容

 

 

 

 

 

 

 

</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跳转提示</span><span>

 

 

(3) GET

http://reg.163.com/crossdomain.jsp?username=xjtujay&loginCookie=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF&url=http%3A%2F%2Ffm163.163.com%2Fcoremail%2Ffcg%2Fntesdoor2%3Flightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1%26username%3Dxjtujay

 

请求头部

GET /crossdomain.jsp?username=xjtujay&loginCookie=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF&url=http% 3A % 2F %2Ffm163.163.com%2Fcoremail%2Ffcg%2Fntesdoor2%3Flightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1%26username%3Dxjtujay HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, */*

Accept-Language: zh-cn,en-US;q=0.5

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; CIBA)

Host: reg.163.com

Connection: Keep-Alive

Cookie: Province=025; ntes_mail_firstpage=normal; NTES_SESS=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF; NETEASE_SSN=xjtujay; NETEASE_ADV=11&23&1228200054655; URSJESSIONID=aGHZvw0enBrb

 

应答头部

HTTP/1.1 200 OK

Date: Tue, 02 Dec 2008 06:40:52 GMT

Server: Apache

Cache-Control: max-age=0

Expires: Tue, 02 Dec 2008 06:40:52 GMT

Pragma: No-cache

Cache-Control: no-cache

Expires: Thu, 01 Jan 1970 00:00:00 GMT

Content-Length: 2145

Connection: close

Content-Type: text/html; charset=UTF-8

 

应答内容

 

 

 

 

 

 

 

                           

                           

                           

</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跳转提示</span><span>

< META HTTP-EQUIV=REFRESH CONTENT="0;URL=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=xjtujay">

 

 

(4) GET

http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=xjtujay

 

请求头部

GET /coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=xjtujay HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, */*

Accept-Language: zh-cn,en-US;q=0.5

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; CIBA)

Host: fm163.163.com

Connection: Keep-Alive

Cookie: Province=025; ntes_mail_firstpage=normal; NTES_SESS=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF; NETEASE_SSN=xjtujay; NETEASE_ADV=11&23&1228200054655

 

应答头部

HTTP/1.1 302 Found

Date: Tue, 02 Dec 2008 06:40:56 GMT

Server: Apache

Set-Cookie: Coremail=TYlruaxjaLMaE%TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg; path=/; domain=163.com

Location: http://tg 1a 89.mail.163.com/a/j/js3/main.jsp?sid=TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg

Content-Length: 264

Connection: close

Content-Type: text/html; charset=iso-8859-1

 

应答内容

302 Found

Found

The document has moved here.

 

附录二 通讯录示例HTML

 

</font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span><input type="hidden" name="sid" value="XApcTnKKGzpsqgDHliKKgiYNjfXyQlnK" ></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span><input type="hidden" name="ifirstv" value=""></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font color="#000000" size="3">

</font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span><select name="listnum"></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="0" selected ></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不分页</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="10"<span style="mso-spacerun: yes">  </span>></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每页</span><span>10</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="20"<span style="mso-spacerun: yes">  </span>></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每页</span><span>20</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="50"<span style="mso-spacerun: yes">  </span>></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每页</span><span>50</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="100"<span style="mso-spacerun: yes">  </span>></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每页</span><span>100</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">项</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span></select></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font color="#000000" size="3">

</font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span><select name="showlist"></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="all" selected ></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">全部分组</span><span></option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="FRIENDS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">朋友</span><span> </option><option value="FAMILY"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">亲人</span><span> </option><option value="COWORKERS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同事</span><span> </option><option value="NETFRIENDS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网友</span><span> </option><option value="RECENT"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常用联系人</span><span> </option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span></select></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font color="#000000" size="3">

</font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span><select name="gname"></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><font size="3"><font color="#000000"><span><span style="mso-tab-count: 2">              </span><option value="FRIENDS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">朋友</span><span> </option><option value="FAMILY"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">亲人</span><span> </option><option value="COWORKERS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同事</span><span> </option><option value="NETFRIENDS"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网友</span><span> </option><option value="RECENT"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常用联系人</span><span> </option></span></font></font></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font size="3"><font color="#000000"><span style="mso-tab-count: 1">       </span></select></font></font></span></p> <p class="MsoNormal" style="BACKGROUND: #a0a0a0; MARGIN: 0cm 0cm 0pt"><span><font color="#000000" size="3">

 

      

      

      

   </span>1"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">张旭</span><span><space>0064235@sina.com

      

      

 

      

      

      

  </span>2"></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">颜克斌</span><span><space>yankebin@163.com

      

      

 

      

      

      

  </span>3">abuse<space>abuse@service.netease.com

      

      

 

      

      

      

  </span>19">peter<space>peter@mail.xjtu.edu.cn

      

      

 

      

      

      

 

 

附录三 Cookie以及CookieHandler的实现

Cookie的实现

import java.net.*;

   import java.text.*;

   import java.util.*;

 

   public 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);

             

 

     /**

      * Construct a cookie from the URI and header fields

      *

      * @param uri URI for cookie

      * @param header Set of attributes in header

      */

     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;

     }

 

     /**

      * Check if cookie isn't expired and if URI matches,

      * should cookie be included in response.

      *

      * @param uri URI to check against

      * @return true if match, false otherwise

      */

     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();

     }

   }

 

CookieHandler的实现

import java.io.*;

import java.net.*;

import java.util.*;

 

public class ListCookieHandler extends CookieHandler {

 

       // "Long" term storage for cookies, not serialized so only

       // for current JVM instance

       private List cache = new LinkedList();

 

       /**

        * Saves all applicable cookies present in the response headers into cache.

        *

        * @param uri

        *            URI source of cookies

        * @param responseHeaders

        *            Immutable map from field names to lists of field values

        *            representing the response header fields returned

        */

 

       public void put(URI uri, Map> responseHeaders)

                     throws IOException {

 

              System.out.println("Cache: " + cache);

              List setCookieList = responseHeaders.get("Set-Cookie");

              if (setCookieList != null) {

                     for (String item : setCookieList) {

                            Cookie cookie = new Cookie(uri, item);

                            // Remove cookie if it already exists

                            // New one will replace

                            for (Cookie existingCookie : cache) {

                                   if ((cookie.getURI().equals(existingCookie.getURI()))

                                                 && (cookie.getName().equals(existingCookie

                                                               .getName()))) {

                                          cache.remove(existingCookie);

                                          break;

                                   }

                            }

                            System.out.println("Adding to cache: " + cookie);

                            cache.add(cookie);

                     }

              }

       }

      

       public void print() {

              System.out.println("Cache: " + cache);

       }

      

       public void remove(String name) {

              for (Cookie existingCookie : cache) {

                     if (name.equals(existingCookie.getName())) {

                            System.out.println("Remove from cache: " + existingCookie);

                            cache.remove(existingCookie);

                            break;

                     }

              }

       }

      

       public void put(URI uri, String value) {

              print();

              Cookie cookie = new Cookie(uri, value);

              for (Cookie existingCookie : cache) {

                     if ((cookie.getURI().equals(existingCookie.getURI()))

                                   && (cookie.getName().equals(existingCookie

                                                 .getName()))) {

                            cache.remove(existingCookie);

                            break;

                     }

              }

              System.out.println("Adding to cache: " + cookie);

              cache.add(cookie);

       }

 

       /**

        * Gets all the applicable cookies from a cookie cache for the specified uri

        * in the request header.

        *

        * @param uri

        *            URI to send cookies to in a request

        * @param requestHeaders

        *            Map from request header field names to lists of field values

        *            representing the current request headers

        * @return Immutable map, with field name "Cookie" to a list of cookies

        */

 

       public Map> get(URI uri,

                     Map> requestHeaders) throws IOException {

 

              // Retrieve all the cookies for matching URI

              // Put in comma-separated list

              StringBuilder cookies = new StringBuilder();

              for (Cookie cookie : cache) {

                     // Remove cookies that have expired

                     if (cookie.hasExpired()) {

                            cache.remove(cookie);

                     } else if (cookie.matches(uri)) {

                            if (cookies.length() > 0) {

                                   cookies.append("; ");

                            }

                            cookies.append(cookie.toString());

                     }

              }

 

              // Map to return

              Map> cookieMap = new HashMap>(

                            requestHeaders);

 

              // Convert StringBuilder to List, store in map

              if (cookies.length() > 0) {

                     List list = Collections.singletonList(cookies.toString());

                     cookieMap.put("Cookie", list);

              }

              System.out.println("Cookies: " + cookieMap);

              return Collections.unmodifiableMap(cookieMap);

       }

}

你可能感兴趣的:(J2EE)