2012-10-06 29 views
5

什麼是跨越發送一個URLConnection一個「完全」的cookie的正確方法?如何在URLConnection中發送cookie?

我一直在使用:

URL url = new URL(page); 
URLConnection urlConn = url.openConnection(); 

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

的的myCookie值 testCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

有沒有辦法送路徑,域,並與它過期?你需要以某種方式對值進行編碼嗎?

回答

3

好吧,如果你只設置一個cookie我想你可以簡單地做這樣的:

urlConn.setRequestProperty("Cookie", "user=mary17; domain=airtravelbargains.com; path=/autos"); 

如果您要設置多個cookie比你很可能使用addRequestProperty方法來代替。

對於到期屬性請務必使用格式爲:平日,DD-MON-YY HH:MM:SS GMT。

唯一合法的時區是格林威治時間和日期的元素之間的分隔符必須是 破折號。

12

This (currently accepted) answer是錯誤的 - 對於http 客戶您使用;分隔多個cookie值,所以他的例子實際上發送三個coookies:

  • user=mary17
  • domain=airtravelbargains.com
  • path=/autos

如果我們在談論一個系列ver響應和Set-Cookie標題,答案是正確的,但我們不是 - urlconnection是爲客戶端連接到服務器。

那麼怎麼樣DomainExpiresPath信息,然後你問?關鍵是,你不意味着來發送信息。路徑,域名和過期只是要發送給瀏覽器(或任何其他HTTP客戶端)的指令,因爲它們是客戶端的指令。你只是爲了發送有效的cookie值服務器,所以沒有辦法送你自找的,因爲這沒有任何意義的信息。

您可以通過在瀏覽器中瀏覽您有任何HTTP會話看到這個自己。瀏覽器將只發送這樣的東西:

Cookie: cookiename=value; anothercookie=othervalue; 

這是因爲它應該是。

或者,您可以檢查RFC 6265,在那裏你可以從內容是DomainExpiresPathSet-Cookie頭(發送到瀏覽器)的屬性表中直接看到,而不是Cookie頭(瀏覽器發送或其他http客戶端到服務器)。