Logowanie przez URLConnection

Odpowiedz Nowy wątek
2011-08-09 09:13
0

Próbuję wykonać program, który logowałby się na moje konto w OGame, a nastąpnie wykonywał na nim pewne określone działania. Jak na razie mam niestety problem z samym logowaniem. Z kodu źródłowego strony udało mi się odseparować taki oto formularz:

<form action="http://uni101.ogame.pl/game/reg/login2.php" method="post">
 <input type="hidden" name="login" value="miazga" />
 <input type="hidden" name="pass" value="koronowy" />
 <input type="submit" value="Zaloguj się" />
</form>

W praktyce składa się on z jednego tylko przycisku, po kliknięciu którego przenosimy się od razu zalogowani na stronę OGame (na potrzeby przykładu założyłem specjalne konto; serwer: Andromeda, login: miazga, hasło: koronowy).

Spróbowałem otrzymać w Javie kod, który łączyłby się ze stroną logowania, a następnie wyświetlał jej nagłówki (headers) oraz kod źródłowy; dla pewności podszyłem się nawet pod moją przeglądarkę, wygląda to tak:

URLConnection connection = new URL("http://uni101.ogame.pl/game/reg/login2.php").openConnection();
connection.setRequestProperty("User-Agent", "Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.9.168 Version/11.50");
connection.setDoOutput(true);
PrintWriter writer = new PrintWriter(connection.getOutputStream());
writer.print("login=miazga&pass=koronowy");
writer.close();
iterator<String> iterator = connection.getHeaderFields().keySet().iterator();
while (iterator.hasNext()) {
    String key = iterator.next();
    System.out.println(key+": "+connection.getHeaderField(key));
}
System.out.println();
Scanner scanner = new Scanner(connection.getInputStream());
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

Wydruk w konsoli jest taki:

null: HTTP/1.1 200 OK
Date: Tue, 09 Aug 2011 06:43:02 GMT
Vary: Accept-Encoding
Content-Length: 57
Connection: close
Content-Type: text/html; charset=utf-8
Server: Apache

<script>document.location.href='http://ogame.pl'</script>

Niestety, wbrew oczekiwaniom w nagłówkach nie znajduję się żadne przekierowanie ani ciasteczko, pojawia się jedynie prosty skrypt przenoszący na stronę główną gry (tzn. przenosiłby, gdyby to była przeglądarka).

Zaznaczam, że powinienem zostać przekierowany pod adres np.: http://uni101.ogame.pl/game/i[...]326d4007e1&kid=&lgn=1

Pod koniec jeszcze dwie moje obserwacje:

  • Login i hasło mogą być wysyłane zarówno metodą POST jak i GET (nie zmienia to ani działania formularza w przeglądarce ani kodu w Javie).
  • Jeżeli w Javie otworzy się stronę logowania bez wysyłania loginu i hasła, to wówczas pojawiają się 4 dodatkowe nagłówki:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Set-Cookie: PHPSESSID=c48f489282847e876a7223120701953c; path=/
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

To już chyba wszystko. Byłbym bardzo wdzięczny, gdyby komuś udało się rozwiązać ten problem i ustalić, dlaczego mój program nie zachowuje się tak jak powinien.

Pozdrawiam, Towe

Pozostało 580 znaków

2011-08-09 10:22
1

Tak się składa, że ostatnio też myślałem jak najszybciej napisać bocika do Ogame i doszedłem do wniosku, że jak miałbym to robić to chyba robiłbym to przy użyciu selenium. Rozważ to, bo wtedy nie musisz się martwić o sesje, nagłówki itd. Dzieki selenium przeglądarka odpali się sama, i wykona co chcesz. Rzuć okiem na to:
http://code.google.com/p/selenium/wiki/GettingStarted

Pozostało 580 znaków

2011-08-09 10:57
0

To wygląda naprawdę nieźle. Co prawda dalej nie wiem, dlaczego kod nie działa tak jak powinien, ale przynajmniej mój problem jest już rozwiązany. Wielkie dzięki :)

edytowany 2x, ostatnio: towe, 2011-08-09 11:10

Pozostało 580 znaków

2011-08-09 13:16
0

Bardzo polecam wtyczkę do firefoksa o nazwie "Live HTTP headers". Zawsze jej używam, gdy piszę programy , które mają logować się do różnych serwisów.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0