Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CURL] Skrypt logujacy do panelu home.pl
Forum PHP.pl > Forum > PHP
astatic
Witam

Pisze skrypt logujacy sie do mojego konta (panel admin) na serwerze home.pl.
Ich skrypt logowania w formularzu generuje w polu typu HIDDEN token losowy.

i tu sie zaczyna problem... za pomoca CURLa chce sie zalogowac przesylam zmienne POSTem ale brakuje mi tego tokena poniewaz on musi byc pobierany i wysylany "w tym samym czasie" bo jest on losowy.

Czytalem manuala ale nie znalazlem na to odpowiedzi - moze ktos z Was mial juz taki problem?

z gory dziekuje za pomoc pozdrawiam!

  1. <?php
  2. $postFields['form_login'] = '1';
  3. $postFields['form_user'] = 'login';
  4. $postFields['form_pass'] = 'haslo';
  5. $postFields['form_store'] = 'yes';
  6. $postFields['form_send'] = 'Wejd%BC';
  7.  
  8. $cookie_file_path = "cookie.txt"; 
  9.  
  10. $fp = fopen($cookie_file_path,'wb');
  11. fclose($fp); 
  12.  
  13. $ch = curl_init('http://home.pl/login');
  14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  15. $string_tmp = curl_exec($ch); // tu pobierany jest TOKEN ktory sie zmienia podczas wysylania strony 
  16.  //  wiectoken tokenowi nie jest rowny - zreszta wiadomo (refresh)
  17.  
  18. $t = substr($string_tmp, (strpos($string_tmp, "form_token"))+19);
  19. $x = substr($t, 0, strpos($t, "">"));
  20. //$postFields['form_token'] = $x;
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
  22. curl_setopt($ch, CURLOPT_URL,"http://home.pl/login");
  23. curl_setopt($ch, CURLOPT_POST,1);
  24. curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
  25. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
  26. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
  27. curl_exec($ch);
  28. ?>
Kihol
Chciałbym odświeżyć jakże stary, ale ciągle aktualny temat. Czy da się to obejść?


Udało mi się rozwiązać problem:
  1. $curl = curl_init('https://home.pl/login/');
  2. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  3. curl_setopt($curl, CURLOPT_HEADER, 0);
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($curl, CURLOPT_COOKIESESSION, true);
  6. curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp/cookiefile.txt");
  7. curl_setopt($curl, CURLOPT_COOKIEJAR, "/tmp/cookiefile.txt"); # SAME cookiefile
  8. $string_tmp = curl_exec($curl);
  9. $t = substr($string_tmp, (strpos($string_tmp, "form_token"))+18);
  10. $x = substr($t, 1, strpos($t, "\">")-1); // pobieranie form_token
  11.  
  12. curl_setopt($curl, CURLOPT_POST, true);
  13. curl_setopt($curl, CURLOPT_USERAGENT, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) FirePHP/0.3");
  14. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  15. curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  16. curl_setopt($curl, CURLOPT_REFERER, 'https://home.pl/login');
  17. curl_setopt($curl, CURLOPT_POSTFIELDS, "form_login=1&form_token=" . $x . "&form_user=LOGIN&form_pass=PASSWORD&form_send=Wejd%BC");
  18. $xxx = curl_exec($curl); //zalogowany


Dodatkowo moim zadaniem było utworzyć konto e-mail, więc gdyby komuś się przydało:
  1. curl_setopt($curl, CURLOPT_URL, 'https://home.pl/setup/service');
  2. curl_setopt($curl, CURLOPT_REFERER, 'https://home.pl/setup/service');
  3. curl_setopt($curl, CURLOPT_POSTFIELDS, 'form_data=1&btt_add_mbox=Nowe+konto&name=' . $name . '&level=50&password=' . $password . '&retype=' . $password . '&forward=&notify=&ftptype=none&directory=&form_save=Zapisz');
  4. $newMail = curl_exec($curl); // dodaj nowy mail
  5. curl_close($curl);


Ważne było zadeklarowanie cookie jeszcze przy pobieraniu formularza (i tym samym tokena), żeby w tej samej sesji go wysłać.
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.