Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie na forum i szukanie (CURL)
Forum PHP.pl > Forum > PHP
lanceq
Witam serdczenie,

mam taki skrypt który loguje się na forum a następnie szuka czegoś w szukajce ale niestety nie działa on prawidłowo, jedyne co robi to wchodzi na podstronę http://otland.net/login.php?do=login i nie loguje się ani nic, nie wiem co jest powodem. Co robię źle ?

O to kodzik

  1. <?php
  2.  
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL, 'http://otland.net/login.php?do=login');
  5. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2');
  6. curl_setopt($ch, CURLOPT_POST, 1);
  7. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=loginek&password=haselko&login=submit');
  8. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  9. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  10. curl_setopt($ch, CURLOPT_REFERER, 'http://otland.net/login.php?do=login');
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  13. curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. $ch = curl_init();
  17. curl_setopt($ch, CURLOPT_URL, 'http://otland.net/search.php?do=process');
  18. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2');
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  20. curl_setopt($ch, CURLOPT_POST, 1);
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, 'keyword=jakis tam keyword');
  22. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');
  23. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt');
  24. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  25. echo curl_exec($ch);
  26. curl_close($ch);
  27.  
  28. ?>
franki01
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=loginek&password=haselko&login=submit');


Przekazujesz zdecydowanie za mało parametrów. Zainstaluj sobie jakiś dodatek do przeglądarki, wychwytujący wysyłane nagłówki i zobacz, jak wiele pól jest przesyłanych. No i upewnij się, że istnieje plik cookies.txt.
lanceq
Nie mam pliku cookies, jak takowy powinien wyglądać? Po 2 jaki program do obsługi nagłówków polecasz na chrome ? Pobrałem "HTTP Headers" i kompletnie nie rozkminiam jego działania.
franki01
Stwórz pusty plik cookies.txt w katalogu ze skryptem. Do chrome'a nie potrafię znaleźć odpowiedniego dodatku. Wszystkie pokazują tylko nagłówki właśnie otwartej strony (w przypadku nagłówka Location jest problem). Na firefoxie korzystam z live http headers jeżeli byłbyś zainteresowany.
lanceq
Cookies się robi automatycznie, pobrałem te live headers na firefoxa i o to nagłówek który jest przesyłany przy klinięciu login:


POST /login.php?do=login vb_login_username=tescik123&vb_login_password=&vb_login_password_hint=Password&s=&securitytoken=1342212874-9ef99121382b299b7bb88224266d61e53a1a953f&do=login&vb_login_md5password=8dcdd9ffe2ac5ac5051324ad0ad9dafb&vb_login_md5password_utf=8dcdd9ffe2ac5ac5051324ad0ad9dafb

hashuje na md5 i do tego ten token, kompletnie nie wiem jak to zrobic zeby działało.

Refresh.


Mógłby ktoś pomóc?
franki01
Interesuje Cię ten fragment:
Kod
vb_login_username=tescik123&vb_login_password=&vb_login_password_hint=Password&s=&securitytoken=1342212874-9ef99121382b299b7bb88224266d61e53a1a953f&do=login&vb_login_md5password=8dcdd9ffe2ac5ac5051324ad0ad9dafb&vb_login_md5password_utf=8dcdd9ffe2ac5ac5051324ad0ad9dafb


Jak widzisz, masz tam podanego użytkownika, jakieś dwa zakodowane hasła oraz security token. Spróbuj usunąć wszystkie ciasteczka tylko z domeny tamtego forum. Następnie wejdź i zaloguj się jeszcze raz. Jeżeli przesyłane (jak wyżej) hasła są takie same, masz problem z głowy. Natomiast jeżeli się różnią, musisz znaleźć w JS sposób szyfrowania tego hasła przed wysłaniem formularza (a tutaj niestety sprawa jest trudniejsza i za darmo raczej nikt nie pomoże smile.gif). Załóżmy, że hasła będą takie same. Przed logowaniem, musisz odwiedzić stronę http://otland.net/login.php?do=login CURLem jeszcze raz i pobrać wartość pola securitytoken. Potem wszystko sklejasz w jeden string wg schematu, który przechwyciłeś i voila, masz wysyłane dane POST.
lanceq
Zalogowałem się ponownie z wyczyszczonymi cookies i wygląda to tak:

Kod
POST /login.php?do=login vb_login_username=tescik123&vb_login_password=&vb_login_password_hint=Password&s=&securitytoken=1342342992-786cd6b3f78a3c6ed0a39a129bb08dcb5f15f894&do=login&vb_login_md5password=8dcdd9ffe2ac5ac5051324ad0ad9dafb&vb_login_md5password_utf=8dcdd9ffe2ac5ac5051324ad0ad9dafb


Jak widać token jest zmienny, co z tym zrobić ?
yozer2308
Pobierz wczesniej stronę, wyciągnij tokena, i wtedy wyślij tokena razem z innymi danymi POST.
franki01
Właśnie przyjrzałem się logowaniu i wcale nie trzeba wyłapywać tego tokenu. Przy logowaniu ze strony głównej, ten token zawsze to "guest".
Wtedy zamiast Twojego:
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=loginek&password=haselko&login=submit');
wstaw:
  1. curl_setopt($ch, CURLOPT_POSTFIELDS, 'vb_login_username=tescik123&vb_login_password=&vb_login_password_hint=Password&s=&securitytoken=guest&do=login&vb_login_md5password=8dcdd9ffe2ac5ac5051324ad0ad9dafb&vb_login_md5password_utf=8dcdd9ffe2ac5ac5051324ad0ad9dafb');


Daj znać czy się udało zalogować.
lanceq
Jednak po wykonaniu tego wyskoczyła mi wiadomość:

Kod
Your submission could not be processed because a security token was missing.

If this occurred unexpectedly, please inform the administrator and describe the action you performed before you received this error.
OtLand


Możecie mi powiedzieć jak ten token uprzednio wyciągnąć i jak to złożyć w kupę ?

Odświeżam, jest w stanie ktoś mi pomóc tutaj ?
strife
Ktoś już wyżej to napisał ... Prześledź nagłowki jakie wysyłasz przez przeglądarkę, a potem na podstawie tego wyślij analogiczne.

Ja jak kiedyś pisałem tego typu skrypt to skorzystałem z klasy php do odczytywania DOM (simple html dom), w celu wyciągnięcia wszystkich elementów w zakresie <form> i wysłania ich modyfikując tylko te dotyczące loginu i hasła, wtedy wysyłał się cały pełny formularz, wtedy również ochrona przed CSRF (czyli ten token) jest omijana.

Pzdr.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.