2012-10-06 12 views
5

Jaki jest właściwy sposób wysyłania "pełnego" pliku cookie przez połączenie URLConnection?Jak wysłać plik cookie w URLConnection?

Używam:

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

urlConn.setRequestProperty("Cookie", myCookie); 

urlConn.setUseCaches(true); 

urlConn.connect(); 

Wartość myCookie jest testCookie = d1lEZk9rSHd3WnpBd2JkWGRhN1RYdz09OkEwQ21pSFJVZzBpVDhhUENaK3ZPV2c9PQ

Czy istnieje sposób, aby wysłać Path, domena, i wygasa z nim? Czy musisz zakodować wartość w jakiś sposób?

Odpowiedz

3

Dobrze, jeśli są tylko ustawienia cookie Myślę, że można po prostu zrobić jak:

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

Jeśli ustawienie więcej niż jeden plik cookie niż można chyba użyć metody addRequestProperty zamiast.

Dla atrybutu expires należy użyć formatu: Dzień powszedni, DD-Mon-RR GG: MM: SS GMT.

Jedyna prawna strefa czasowa to GMT, a separatory między elementami daty muszą być kreskami .

12

This (currently accepted) answer jest źle - http klienci użyć ; separator dla wielu wartości ciasteczek, więc jego przykład faktycznie wysyła trzy coookies:

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

Gdybyśmy mówili o serze Odpowiedź ver i nagłówek Set-Cookie, odpowiedź byłaby słuszna, ale nie jesteśmy - połączenie URL jest dla klienta łączącego się z serwerem.

A co z informacjami o Domain, Expires, Path, o które prosiłeś? Chodzi o to, że nie jesteś oznaczony, aby wysłać tę informację. Ścieżka, domena i wygasa są tylko instrukcjami, które mają być wysłane do przeglądarki (lub dowolnego innego klienta HTTP), ponieważ są instrukcjami dla klienta. Masz tylko wysłać ważne pliki cookie wartości do serwera, więc nie ma sposobu, aby przesłać informacje, o które prosiłeś, ponieważ nie ma to żadnego sensu.

Możesz to zobaczyć samodzielnie, przeglądając dowolną sesję HTTP w przeglądarce. Przeglądarka wysyła tylko takie rzeczy:

Cookie: cookiename=value; anothercookie=othervalue; 

Który jest taki, jak powinien być.

Albo można skontrolować RFC 6265, gdzie można zobaczyć bezpośrednio ze spisu treści, które Domain, Expires, Path są atrybuty nagłówka Set-Cookie (wysyłane do przeglądarki), nie stanowi Cookie header (wysyłane przez przeglądarkę lub inny klient http do serwera).