Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP i JS] Logowanie na stronę w sieci za pomocą PHP
Forum PHP.pl > Forum > PHP
ravns
Witam,

mam takie pytanie i nie wiem jak je rozwiązać.
Mianowicie finalnie chcę zalogować się na pewną stronę i pobrać wyznaczony tekst z tej strony.

Pobrałem funkcją file_get_contents zawartość strony, w nagłówkach dałem:

$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: pl\r\n" .
"Cookie: foo=bar\r\n"
)
);

i wszystko ok,
później przyszło mi do głowy, aby uzupełnić pola login i hasło za pomocą jQuery i przypisania wartości:

$('.login input[name=login]').val('wartosc');
...

ale teraz nie wiem jak zrobić aby po wpisaniu tych logina i hasła wcisnąć przycisk zaloguj. Czyli aby doszło do zalogowania na X stronie.

Czy wykonywać to jakoś za pomocą JS i ponownie wczytać stronę z file_get_contents i pobrać swój tekst.
Czy można to jakoś inaczej wykonać?

Bo robiłem przy użyciu jquery
$('.login input[name=login]').change( function() { ('.login form').submit(); });

ale to nie działa.
Oczywiście pola formularza przesyłane są POST, formularz nie ma id, ani class. jest w div o class = login.

***
Dodam jeszcze gdy samodzielnie kliknąłem submit to wywalało błąd, ponieważ w formularzu jest:

<form action="/user/login" method="POST">

więc to już druga sprawa, ale też nie wiem jak dodać tu adres strony, czyli:

<form action="http://stronka.pl/user/login" method="POST">

no bo pewnie inaczej mnie nie puści.
***
Fifi209
Do takich zadań używa się curl wink.gif Wyślesz post, zapiszesz cookie (choćby SID), odbierzesz wynik.
ravns
Witam,

faktycznie słyszałem o tym, ale jakoś nie wiedzieć czemu tak nie robiłem.

Lecz i tak posiadając poniższy kod nie wychodzi mi to.
Wybrałem przykładową stronę, aby można było się pobawić. Wpisuję swój login i hasło, kolejno na stronie nk prezentera telewizyjnego dajmy na to chce coś pobrać z sekcji czym sie zajmuje.

  1. $cookie_file = 'cookie3.txt';
  2.  
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  5. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  6. curl_setopt($ch, CURLOPT_URL, 'https://nk.pl/login');
  7. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  8. curl_setopt($ch, CURLOPT_POST, 1);
  9. curl_setopt($ch, CURLOPT_POSTFIELDS,
  10. 'login=nazwaaloginuuu&password=hassselkoo');
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. curl_getinfo($ch);
  13. $ss = curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. $ch = curl_init();
  17. $url = 'http://nk.pl/#krzysztof_ibisz';
  18. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  19. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  20. curl_setopt($ch, CURLOPT_URL, $url);
  21. curl_setopt($ch, CURLOPT_HEADER, 0);
  22. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  23. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  25. $site = curl_exec($ch);
  26.  
  27.  
  28.  
  29. $sklad = '|<p id="whatido_text" class="dane">(.*)</p>|is';
  30.  
  31. preg_match($sklad, $site, $matches);
  32. echo $matches[0];
  33.  
  34.  


plik cookie3 jest tworzony i ma zawartość mniej więcej:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.nk.pl TRUE / FALSE 0 nk_session V%2CU5O5c0inEIj2VVApvZNTPjK10
.nk.pl TRUE / FALSE 1335812767 basic_auth 4f95bsfgrfb402292a62eef6a63b
.nk.pl TRUE / FALSE 1343847967 known_user 0
nk.pl FALSE / FALSE 0 nkd 24204|T4yCP|T4yAY

a przeglądarka wyświetla białą tabula rasę.
Fifi209
Przy nk chyba był token, od tego są narzędzia developerskie, wyłacz js i zobacz co leci w post.

ew. livehttpheaders dla ff
ravns
Z tego co widzę, wpisuje się tylko login i hasło na nk.

Zainstalowałem ten dodatek do FF , puściłem skrypt.
Ale szczerze mówiąc nie wiem co ma być szczególnego w tym wyniku programu, aby miało zwrócić moją uwagę.
Proszę o podpowiedź.

Z tego co widzę pokazane są wysyłane nagłówki, ich parametry itp.
Nie ma żadnej wzmianki o POST, tylko widnieje linijka GET i ścieżka do skryptu:
GET /ccc/strona/index3.php HTTP/1.1

Pomijam fakt, że co jakiś czas wtrąbi się tam jakiś antywirus, czy dodatek FF.


PS. Na prawdę nikt nie wie jak dalej postępować?
Fifi209
Spróbuj dodać follow_location, z tego co pamiętam było wymagane.
ravns
dzięki za info, ale niestety nie pomogło.

No nie wiem jak nk nie idzie to możemy choćby spróbować zalogować się na to forum, bo chyba powinno pójść. Ale jutro przygotuję kod i sprawdzę i się odezwę.

Tak sobie też myślę, że może miec wpływ na to logowanie ssl na nk, moze miejsce zapisu coockie, może jakiś parametr jest zły, może user agent?
Fifi209
Przy cookiefile faktycznie

jako ścieżkę podaj
  1.  
  2. dirname(__FILE__).'/nazwa.txt'
  3.  


przykładowo
ravns
Też tak zrobiłem, ale nadal coś jakby się nie logował. Po zalogowaniu , w poniższym kodzie ma się teraz wyświetlić ok, że znalazł wyraz Wyloguj - przynajmniej widzę coś, a nie pustą stronę. Ale testowałem różne parametry i dalej nie wiem. Czy mógłbym prosić abyś sprawdzić ten kod u siebie, podając praktycznie tylko swoje dane logowania, czy u ciebie wejdzie - bo już sam nie wiem, a pasowałoby mi takie coś opanować.

  1. $cookie_file = dirname(__FILE__).'/cookie4.txt';
  2.  
  3.  
  4. $login = 'loggggg';
  5. $haslo = 'hassss';
  6.  
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  9. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  10. curl_setopt($ch, CURLOPT_URL, 'http://forum.php.pl/logowanie.html');
  11. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2');
  12. curl_setopt($ch, CURLOPT_POST, 1);
  13. curl_setopt($ch, CURLOPT_HEADER, 1);
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, 'UserName='.urlencode($login).'&PassWord='.urlencode($haslo));
  15. //curl_setopt($ch, CURLOPT_POSTFIELDS, 'UserName='.($login).'&PassWord='.($haslo));
  16. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  17. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  18. //curl_getinfo($ch);
  19. $ss = curl_exec($ch);
  20. curl_close($ch);
  21.  
  22. $ch2 = curl_init();
  23. $url = 'http://forum.php.pl/index.php?';
  24. curl_setopt($ch2, CURLOPT_COOKIEJAR, $cookie_file);
  25. curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_file);
  26. curl_setopt($ch2, CURLOPT_URL, $url);
  27. curl_setopt($ch2, CURLOPT_HEADER, 1);
  28. //curl_setopt($ch2, CURLOPT_COOKIE, $cookie);// recznie
  29. curl_setopt($ch2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2');
  30. curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
  31. //curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
  32. $site = curl_exec($ch2);
  33. curl_close($ch2);
  34.  
  35. // plus
  36.  
  37.  
  38.  
  39. if (strstr($site, 'Wyloguj')) echo 'ok';
  40. else echo 'nie ma';
  41.  
Fifi209
Zwróć uwagę, że adres w formularzu jest taki:

Cytat
Request URL:http://forum.php.pl/index.php?act=Login&CODE=01


W dodatku forum przesyła też:
  1. <input type="hidden" name="referer" value="http://forum.php.pl/logowanie.html">


Czyli do POST też musisz dodać referer o takiej wartości

@edit

Jak chcesz potem jeszcze raz pobrać stronę, nie musisz od nowa wszystkiego ustawiać wystarczy że wywołasz
curl_setopt($ch, CURLOPT_URL, 'nowyadres')

i znów curl_exec()
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.