Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Logowanie za pomocą cURL - wyciągnięcie ciągu znaków
Forum PHP.pl > Forum > Przedszkole
botnaizi
Witam

Potrzebuję za pomocą skryptu zalogować się na stronę.
Mam już coś takiego:
  1. function createPostString($aPostFields) {
  2. foreach ($aPostFields as $key => $value) {
  3. $aPostFields[$key] = urlencode($key) . '=' . urlencode($value);
  4. }
  5. return implode('&', $aPostFields);
  6. }
  7.  
  8. $cookies = 'cookies.txt';
  9.  
  10. $postFields['name'] = 'xxx';
  11. $postFields['password'] = 'xxx';
  12. $postFields['lowRes'] = '0';
  13. $postFields['s1'] = '';
  14. $postFields['login'] = '1360409045';
  15. $curl = curl_init();
  16. curl_setopt($curl, CURLOPT_URL, 'http://ts9.travian.pl');
  17. curl_setopt($curl, CURLOPT_REFERER, 'http://ts9.travian.pl');
  18. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12;MEGAUPLOAD 1.0");
  19. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
  20. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies);
  21. curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);
  22. curl_setopt($curl, CURLOPT_POST, TRUE);
  23.  
  24. curl_setopt($curl, CURLOPT_POSTFIELDS, createPostString($postFields));
  25.  
  26. $site = curl_exec($curl);
  27. curl_close($curl);


Tylko pojawia się problem, bo jak rozumiem to przy wysyłaniu formularza muszą być wszystkie pola wypełnione. I próbuję wyciągnąć z czegoś takiego wartość value, ale za nic nie mogę dopasować wyrażenia regularnego.
  1. <input type="hidden" name="login" value="1360412065" />

Może ktoś podpowiedzieć jak powinienem sformułować wyrażenie, aby było dobrze? I czy skrypt w ogóle będzie miał prawo działać?
Giluś
  1. preg_match('#<input type="hidden" value="(.*)" name="yous">#',$data,$ids);


Dopasuj sobie to odpowiednio dla siebie..
botnaizi
Dobra, dorzuciłem coś takiego:

  1. $info = preg_match_all('#name="login" value="(.*)"#', $site, $infox);
  2.  


Tylko, że wyrzuca mi coś takiego, i za nic nie wiem jak zrobić, żeby wyświetlić wynik.
  1. Array ( [0] => Array ( ) [1] => Array ( ) )

Giluś
  1. <?php
  2.  
  3. $data = '<input type="hidden" name="login" value="1360412065" />';
  4.  
  5. preg_match('#<input type="hidden" name="login" value="(.*)" />#',$data,$ids);
  6.  
  7. echo '<pre>';
  8. print_r($ids);
  9. echo '</pre>';
  10.  
  11. ?>


Masz demo:
http://ideone.com/KE4xnN

Pozdrawiam.
botnaizi
Ok, dzięki musiałem i tak ściągnąć to przez file_get_contents bo inaczej nie chciało załapać. Z tym, że i tak nie mogę się zalogować. Więc chyba odpuszczę bo pewnie jest przeciw temu jakieś zabezpieczenie.
Giluś
Nie wiem jak działa Travian skrypt, ale spróbuj to zrobić tak:

  1. function file_get_contents_curl($url) {
  2. $cookie = 'bbnaut=' . urlencode('2458561058e5cfaa') . '; welcomeScreenNew=' . urlencode('welcomeScreen');
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_HEADER, 0);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_URL, $url);
  7. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  8. $data = curl_exec($ch);
  9. curl_close($ch);
  10. return $data;
  11. }
  12.  
  13. function file_get_contents_curl_post($url, $name, $pass) {
  14. $c = curl_init();
  15. curl_setopt($c, CURLOPT_URL, $url);
  16. curl_setopt($c, CURLOPT_POST, 1);//przesylamy metodą post
  17. curl_setopt($c, CURLOPT_POSTFIELDS, 'name='.$name.'&password='.$pass); //dane do wyslania
  18. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  19. $page = curl_exec($c);
  20. curl_close($c);
  21. return $page;
  22. }
  23.  
  24.  
  25. $url = 'http://ts9.travian.pl';
  26. $data = file_get_contents_curl($url);
  27. preg_match('#<input type="hidden" name="login" value="(.*)" />#',$data,$ids);
  28.  
  29. $id = $ids[1];
  30. $page = file_get_contents_curl_post($url, $name, $pass);
  31.  
  32. print_r ($page);
  33.  


Sprawdź to..
botnaizi
Dopisałem $name i $pass jednak i tak nie chciało zalogować. Chyba, że coś tam jeszcze miałem dopisać lub zmienić?
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.