Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] curl - Logowanie do forum phpBB
Forum PHP.pl > Forum > Przedszkole
busyboy
Witam Serdecznie

Chciałem zrobić zdalne logowanie do forum phpBB za pomocą curl. Posklejałem taki kod:

  1. <?php
  2. $config['address'] = 'http://adresstrony/forum/';
  3.  
  4. $path['cookie'] = dirname(__FILE__).'/cookies.txt';
  5.  
  6. $post['username'] = 'login';
  7. $post['password'] = 'haslo';
  8. $post['redirect'] = '';
  9. $post['login'] = 'Zaloguj';
  10.  
  11. $ch = curl_init($config['address'].'login.php');
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  13. curl_setopt($ch, CURLOPT_HEADER, true);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, $path['cookie']);
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, $path['cookie']);
  16.  
  17. curl_setopt($ch, CURLOPT_POSTFIELDS, prepare_request($post));
  18. curl_exec($ch);
  19. curl_close($ch);
  20.  
  21. function prepare_request($query)
  22. {
  23. if(is_array($query) && !empty($query))
  24. {
  25. foreach($query as $key => $value)
  26. {
  27. $query[$key] = urlencode($key).'='.urlencode($value);
  28. }
  29.  
  30. return implode('&', $query);
  31. }
  32. else
  33. {
  34. return false;
  35. }
  36. }
  37. ?>


Skrypt uruchamia stronę – ale niestety nie loguje – pojawia się informacja o błędnie wprowadzonym danych (login / hasło) i pojawia się u góry strony komunikat :

  1. HTTP/1.0 200 OK Cache-Control: private, pre-check=0, post-check=0, max-age=0 Expires: 0 Pragma: no-cache Content-Type: text/html Date: Mon, 02 Jan 2012 12:05:58 GMT Connection: close.


Nie wiem hmm czy forum może mieć jakieś zabezpieczenia ? żeby nie można było się logować za pomocą curl ?

Z góry dziękuje za pomoc

Pozdrawiam
BusyBoy
Sephirus
AFAIK musisz ustawić jeszcze to:

  1. curl_setopt($ch, CURLOPT_POST, 1);


żeby dane poszły postem wink.gif
cycofiasz
Nie musisz wstawiać tego co podał Sephirus. Oczywiście forum może mieć pewne zabezpieczenia ale jeśli nie jest to captcha to można je obejść. Nie jesteśmy w stanie pomóc bez konkretego adresu forum i danych do logowania
busyboy
Po wklejeniu powyzszego kodu - nic nie pomoglo - bez zmian sad.gif
Sephirus
Dlatego napisałem AFAIK bo nie byłem pewien tongue.gif

Hmmm bardzo często strony mają zabezpieczenia przed logowaniem zrobione w taki sposób, że na stronie z formularzem dodają się jakieś cookie itp. potem następuje wysłanie formularza i postów i to cookie jest. Spróbuj może najpierw odwiedzić adres samego forum albo formularza logowania a następnie skrypt logujący - użyj oczywiście tego samego COOKIEFILE i COOKIEJAR w obu przypadkach.

Dodatkowym zabezpieczeniem może być też jakieś pole w formularzu - zobacz czy tam nic więcej nie jest wysyłane.

  1. $config['address'] = 'http://adresstrony/forum/';
  2.  
  3. $path['cookie'] = dirname(__FILE__).'/cookies.txt';
  4.  
  5. $post['username'] = 'login';
  6. $post['password'] = 'haslo';
  7. $post['redirect'] = '';
  8. $post['login'] = 'Zaloguj';
  9.  
  10. $ch = curl_init($config['address']); // tu daj adres pod jakim jest formularz
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  12. curl_setopt($ch, CURLOPT_HEADER, true);
  13. curl_setopt($ch, CURLOPT_COOKIEFILE, $path['cookie']);
  14. curl_setopt($ch, CURLOPT_COOKIEJAR, $path['cookie']);
  15. curl_exec($ch);
  16. curl_close($ch);
  17.  
  18. $ch = curl_init($config['address'].'login.php');
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  20. curl_setopt($ch, CURLOPT_HEADER, true);
  21. curl_setopt($ch, CURLOPT_COOKIEFILE, $path['cookie']);
  22. curl_setopt($ch, CURLOPT_COOKIEJAR, $path['cookie']);
  23.  
  24. curl_setopt($ch, CURLOPT_POSTFIELDS, prepare_request($post));
  25. curl_exec($ch);
  26. curl_close($ch);


W ogóle najlepiej prześledzić dokładnie jak jest z tym logowaniem. Zobaczyć co ustawia strona z formularzem (jakie ciastka), co wysyła postem (firebug) i powtórzyć to dokładnie tak samo.

Proponuje też dodać do CURL USER_AGENT'a jakiegoś i referera na adres strony z formularzem:

  1. curl_setopt($ch, CURLOPT_USER_AGENT, 'Mozilla [...]');
  2. curl_setopt($ch, CURLOPT_REFERER, $config['address']);
busyboy
Sam skrypt sie loguje ba forum - w kazdym razie probuje - dostaje informacje

Podałeś nieprawidłowe lub nieaktywne dane użytkownika

Kliknij Tutaj aby spróbować ponownie

Kliknij Tutaj aby powrócić do Strony Głównej


Parametry do logowania sa poprawne - konto jest aktywne bo sprawdzalem recznie - nie ma zadnych tokenow itp
Sephirus
No to musisz podać adres forum :/ (możesz na PW - pomogę)

A daj passwrd zamiast password biggrin.gif

  1. $post['passwrd'] = 'haslo';


wink.gif
by_ikar
Ustaw sobie jeszcze referer na tą konkretną stronę. Możliwe że również to sprawdzają.
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.