Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czy tag button moze blokowac logowanie curl
Forum PHP.pl > Forum > Przedszkole
rad11
Tak jak w temacie czy <button> moze byc przyczyna ze logowanie curlem nie chce przejsc dalej?
by_ikar
Nie, bo curl nie wykonuje kodu html, a wykonuje żądania http. Otwórz narzędzia developerskie w chrome/operze/ff i prześledź jak wykonywane jest żądanie logowania się i je odwzoruj curl'em.
rad11
No wlasnie sledze i sledze i niemoge sie dosledzic tego:
https://www.strava.com/login

  1.  
  2. function getAuthenticityToken(){
  3. $fo = fopen('cookie.txt', 'w');
  4. fclose($fo);
  5. $ch = curl_init();
  6. $agent = $_SERVER["HTTP_USER_AGENT"];
  7. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  8. curl_setopt($ch, CURLOPT_URL, 'https://www.strava.com/login');
  9. // curl_setopt($ch, CURLOPT_POST, 1);
  10. // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  15. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  16. curl_setopt($ch, CURLOPT_REFERER, "http://www.strava.com");
  17. curl_setopt($ch, CURLOPT_HEADER, 0);
  18. $response = curl_exec($ch);
  19. curl_close ($ch);
  20.  
  21. preg_match_all('@<meta content=(.*?)>@', $response, $matches);
  22.  
  23. $authenticity_token = explode('content=', $matches[0][5]);
  24. $authenticity_token = explode('name=', $authenticity_token[1]);
  25. $authenticity_token = str_replace('"', '', $authenticity_token[0]);
  26. return $authenticity_token;
  27. }
  28.  
  29. function login($site, $email, $password){
  30.  
  31. $post_data ='email='.urlencode($email).'&password='.$password. '&authenticity_token='.urlencode(getAuthenticityToken()).'&plan=&utf8=%E2%9C%93';
  32.  
  33. $fo = fopen('cookie.txt', 'w');
  34. fclose($fo);
  35. $ch = curl_init();
  36. $agent = $_SERVER["HTTP_USER_AGENT"];
  37. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  38. curl_setopt($ch, CURLOPT_URL, $site);
  39. curl_setopt($ch, CURLOPT_POST, 1);
  40. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  41. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  42. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  43. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  44. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  45. curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
  46. curl_setopt($ch, CURLOPT_REFERER, 'https://www.strava.com/login');
  47. curl_setopt($ch, CURLOPT_HEADER, 0);
  48. curl_setopt($ch, CURLOPT_COOKIESESSION, true);
  49. $response = curl_exec($ch);
  50.  
  51. curl_close ($ch);
  52. return $response;
  53. }
  54. echo login('https://www.strava.com/login','x', 'x');


Jakies pomysly jak to inaczej rozwiazac?
SpiritCode
Z logowaniem sprawa wygląda tak:
1. masz stronę z formularzem
2. z formularza dane posyłane są do podstrony która Cię loguje.

Musisz po prostu odpowiednie parametry wysłać na odpowiednią podstronę.
Tutaj z tego co widzę jest też jakiś token. Możesz mieć z nim problem jeśli go nie przechwycisz
rad11
Probowalem tez recznie w urlu dodac parametry i nic sie nie dzieje token dobrze przechwytuje. Niby po kliku te wszystkie dane ustawia w zakladce session, ale probowalem tez mienic w urlu na session ale ten sam efekt.
SpiritCode
na jaki url przekazujesz dane?
rad11
Probowalem z

https://www.strava.com/login

https://www.strava.com/session
SpiritCode
powinieneś posyłać na /session
Sprawdziłem(nie mam konta) wydaje się być ok bo wywala mi, ze złe dane logowania podaję
rad11
No tak z tym ze tak jak mowie probowalem i wysylac dane na /session i nic sie nie dzieje. Dodam ze mam komunikat ze session expired.

Wracam do tematu gdyż nadal nie udało mi się go rozwiązać, pomógłby mi kto dojść do tego jak przejsc przez ten formularz bo Ja nie mam zadnych pomyslow w tym temacie a curl tez kuleje u mnie ?
SpiritCode
Sam sobie odpowiedziałeś
Cytat
Dodam ze mam komunikat ze session expired.


Poproś administrację o stałe session hash lub generuj nowe za każdym razem.
pitu
Przecież oni udostępniają api.
rad11
Pitu tak udostepniaja tylko, ze ja potrzebuje pobrac do tego API client id oraz client secret na podstawie podanego konta i hasla przez klienta.

Cytat
Poproś administrację o stałe session hash lub generuj nowe za każdym razem.


Co masz dokladnie na mysli i w czym mi to pomoze?
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.