Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie cURL
Forum PHP.pl > Forum > Przedszkole
nitro11
Mam coś takiego:

  1. $c = curl_init();
  2. curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file);
  3. curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file);
  4. curl_setopt($c, CURLOPT_URL, 'http://www.domena.pl');
  5. curl_setopt($c, CURLOPT_POST, 1);
  6. curl_setopt($c, CURLOPT_POSTFIELDS,
  7. 'user=maj&pass=55555');
  8. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  9. curl_getinfo($c);
  10. curl_exec($c);
  11. $nazwa=curl_exec($c);
  12. var_dump($nazwa);


Problem jest taki, że dostaję stronę z wypełnionym formularzem, ale jeszcze trzeba kliknąć
przycisk "Zaloguj".

Jak to obejść?
yevaud
poprosiles curlem o strone i dostales strone
jesli chcesz sie zalogowac to wysylaj dane ktore umozliwia logowanie

http://forum.php.pl/lofiversion/index.php/t89644.html
nitro11
Czytałem już tamtego posta.

Dodałem jeszcze połączenie z 2 stroną, która powinna byćwidoczna tylko po zalogowaniu:

  1. echo $url='http://www.domena.pl/dlazalogowanych';
  2. $ch_e=curl_init($url);
  3. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060427 Firefox/1.0.6');
  4. //curl_setopt($ch_e, CURLPROXY_HTTP, '221.130.17.143');
  5. curl_setopt($ch_e, CURLPROXY_HTTP, '173.203.81.112');
  6. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  8. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  9. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  10. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  11. curl_setopt($ch_e, CURLOPT_COOKIEJAR, 'cok.txt');
  12. curl_setopt($ch_e, CURLOPT_COOKIEJAR, 'cok.txt');
  13. #curl_setopt($ch_e, CURLOPT_POSTFIELDS, $postData);
  14. $nazwa=curl_exec($ch_e);
  15. var_dump($nazwa);
  16. //exit;
  17. //sleep(1);



I lipa bo dostaje formularz logowania.

Co robię nie tak ?
tomekmvr
Masz dwa razy linijke nie potrzebnie, ona zapisuje ciastko do pliku
  1. curl_setopt($ch_e, CURLOPT_COOKIEJAR, 'cok.txt');


a ty musisz wysłać informacje o sesji więc zmień je na
  1. curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cok.txt');
nitro11
Nie pomogło.
Przerobiłem wszystko i teraz mam:


  1. $url = 'http://www.a.pl';
  2.  
  3. $ch = curl_init();
  4.  
  5. // SET URL FOR THE POST FORM LOGIN
  6. curl_setopt($ch, CURLOPT_URL, 'http://www.a.pl);
  7. 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");
  8. curl_setopt ($ch, CURLOPT_POST, 1);
  9. curl_setopt ($ch, CURLOPT_POSTFIELDS, "user=maj&pass=55555");
  10. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  11. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  12. $store = curl_exec ($ch);
  13. curl_setopt($ch, CURLOPT_URL, $url);
  14. $content = curl_exec ($ch);
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. $url = 'http://www.a.pl';
  23.  
  24. $ch_e=curl_init($url);
  25. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.0.6');
  26.  
  27. curl_setopt($ch_e, 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");
  28. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  29. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  30. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  31. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  32. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  33. curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  34. curl_setopt($ch_e, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
  35. curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cok.txt');
  36. $nazwa=curl_exec($ch_e);
  37. var_dump($nazwa);


Ale dalej nie działa :/
yevaud
upewnij sie ze sa tworzone pliki z tymi ciastkami, jesli nie to stworz jakies z takim dostepem zeby apache/php mogl do nich zapisywac
tomekmvr
Cały czas popełniasz ten sam błąd, nie potrzebnie pobierasz dane o sesji przy drugim wywołaniu curla, masz wysłać te dane co pobrałeś po pierwszym wywołaniu.
nitro11
Poprawiłem, ale dalej lipa:

  1. $url = 'http://www.com.pl';
  2.  
  3. $ch = curl_init();
  4.  
  5. // SET URL FOR THE POST FORM LOGIN
  6. curl_setopt($ch, CURLOPT_URL, 'http://www.com.pl');
  7. define('USER_AGENT', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 ( .NET CLR 3.5.30729)');
  8. curl_setopt ($ch, CURLOPT_POST, 1);
  9. curl_setopt ($ch, CURLOPT_POSTFIELDS, "user=m&pass=l");
  10. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  12. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14. $store = curl_exec ($ch);
  15. curl_setopt($ch, CURLOPT_URL, $url);
  16. $content = curl_exec ($ch);
  17. var_dump($content);
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. $url = 'http://www.com.pl';
  26. $ch_e=curl_init($url);
  27. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.0.6');
  28.  
  29. define('USER_AGENT', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 ( .NET CLR 3.5.30729)');
  30. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  31. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  32. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  33. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  34. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  35. //curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  36. //curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  37. //curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cok.txt');
  38. $nazwa=curl_exec($ch_e);
  39. var_dump($nazwa);


W dodatku w pliku cookie.txt nic się nie zapisuje, odpowiednie prawa do plików ustawione.
Nie wiem o co chodzi ?
yevaud
1. tego posta wysylaj tam gdzie powinien byc form wyslany, a nie na sama domene
od samego poczatku robisz curl_setopt($c, CURLOPT_URL, 'http://www.domena.pl'), a powinienes tego posta wysylac tam gdzie serwer przetwarza dane logowania, a nie tam gdzie pokazuje formularz
sprawdz jak form logowania ma action ustawiony i tam wysylaj

2. podczas obu wywolan uzywaj
  1. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  2. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');


obydwu na raz i wskazujacych na ten sam plik

a to jest złe winksmiley.jpg
  1. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  2. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  3. curl_setopt($ch, CURLOPT_COOKIEFILE, 'costam innego.txt');


3. jesli po wywolaniu logowania cookie.txt masz caly czas puste(a uprawnienia sa ok) to po prostu nie zalogowales sie poprawnie, wtedy jest pare w Twoim przypadku prawdopodobnych opcji:
a) wysylasz posta nie tam gdzie trzeba, po prostu nawet nie probojesz sie logowac
cool.gif wysylasz zly login/haslo, wiec sie nie logujesz
c) jest jeszcze jakis token ktorego nie wysylasz
d) serwer odrzuca Twojego posta bo nie lubi tego w jaki sposob mu podajesz np. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT); nie uzywasz podczas proby logowania
nitro11
Formularz logowania jest i tak na stronie głównej (form action -> index.php)także było ok jednak nie loguje się.
Załączam tu aktualny kod z adresem www.
Może Tobie uda się jakoś połączyc, nawet nie zakładając konta powinienneś dostać
info że login i hasło nie pasuja, ja nie dostaje ani że pasują ani że nie pasują sad.gif

  1. $url = 'http://www.pp.god.com.pl/index.php';
  2.  
  3. $ch = curl_init();
  4.  
  5. // SET URL FOR THE POST FORM LOGIN
  6. curl_setopt($ch, CURLOPT_URL, 'http://www.pp.god.com.pl/index.php');
  7. define('USER_AGENT', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 ( .NET CLR 3.5.30729)');
  8. curl_setopt ($ch, CURLOPT_POST, 1);
  9. curl_setopt ($ch, CURLOPT_POSTFIELDS, "user=m&pass=l");
  10. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  11. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  12. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14. $store = curl_exec ($ch);
  15. curl_setopt($ch, CURLOPT_URL, $url);
  16. $content = curl_exec ($ch);
  17. var_dump($content);
  18.  
  19.  
  20.  
  21. $url = 'http://www.pp.god.com.pl/index.php';
  22. $ch_e=curl_init($url);
  23. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.0.6');
  24.  
  25. define('USER_AGENT', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 ( .NET CLR 3.5.30729)');
  26. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  27. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  28. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  29. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  30. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  31. $nazwa=curl_exec($ch_e);
  32. var_dump($nazwa);
  33.  


Może ktoś spróbuje odpalić ten kod u siebie i napisze czy poszło ?
yevaud
przeciez masz w tym fomularzu dodatkowe pola ktorych nie dodales
  1. curl_setopt ($ch, CURLOPT_POSTFIELDS, "user=m&pass=l&pp=1&req=log");


  1. <br /><span class="error">Błąd: Użytkownik nie znaleziony</span><br />
nitro11
Ale ze mnie gapa fest...
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.