Zeyomir's Blog Bo piękniej jest wiedzieć coś o wszystkim…

7Mar/13Off
» «

Jedna sesja dla wielu połączeń HttpConnection

Miałem ostatnio do napisania kawałek softu który co kilka sekund pobiera stronę z jakiegoś adresu i parsuje ją w poszukiwaniu pewnych danych- chodziło o zrobienie statystyk jak te dane zmieniają się w czasie, a niestety żadnego api nie udostępniano. Strona była 'zamknięta' przez regułę .htaccess. Żeby dane zobaczyć, trzeba było się więc zalogować. To akurat nie był problem, wystarczyło zrobić coś takiego:

String auth = new sun.misc.BASE64Encoder().encode((user + ":" + pass).getBytes());
URL url = new URL("http://url.to.server/path/to/status");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Authorization", "Basic " + auth);

Problem leżał gdzieś indziej. Każde zapytanie tworzyło nową sesję na serwerze. Sesje miały ttl ustawiony na 30minut, a zapytania szły np co 5 sekund- zapychając pięknie serwer. Rozwiązanie okazało się dość proste:

CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

Powyższa linijka powinna się wykonać raz, przed zestawieniem pierwszego połączenia.

» «
Komentarze (1) Trackbacks (0)
  1. Nieczyste rozwiązanie – dużo lepszym pomysłem jest sprawdzanie nagłówków HTTP w poszukiwaniu nagłówka Set-Cookie. Twoje rozwiązanie jeżeli zostanie umieszczone w działającej aplikacji może wywołać nieporządane efekty.


Trackbacks are disabled.