[cURL] Problem z logowaniem na strone.

qw3rt^

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
20
Witam, piszę sobie taki prosty skrypt logowania w cURL'u ale coś te moje wypociny nie działają.


Oto i one:
PHP:
<?php
$cookie = dirname(__FILE__) .'/cookie';
$c = curl_init();
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($c, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($c, CURLOPT_URL, 'strona.z.formularzem');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS,'login=tutaj_login&password=haslo_tutaj_daje');
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_getinfo($c);
curl_exec($c);
curl_close($c);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'Link do strony która wymaga zalogowanego uzytkownika');
curl_exec($ch);
curl_close($ch);
?>

Formularz:
HTML:
<input name="login" class="loginForm" type="text">
<input name="password" class="loginForm" type="password">
No i coś jest nie tak, dostaje info od strony "Nie jesteś zalogowany"
Hasło i login na bank wpisuje dobre.

Dodam że na tej stronie jest równierz formularz rejestracji, i pola też mają nazwę login i password, z tym że class mają registerForm
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Spróbuj wysłać nagłówek z przeglądarką, poza tym wydaje mi się że przed następnym inicjowaniem curla ($ch) też musisz dać COOKIEFILE i COOKIEJAR
 

qw3rt^

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
20
niestety to nie pomogło.
zmieniłem też nazwe zmiennej "$cookie" na "$cookie_file" ale to nic też nie zmieniło.
 

qw3rt^

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
20
tyle że na tej stronie są dwa pola identycznie nazwane "login", to nie przeszkadza czasem ?
mowa o tej stronie na której chce sie zalogować curlem
 

qw3rt^

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
20
prisonwars.pl
nie wiem w sumie czemu wczesniej nie napisalem. skopiowalem swój temat z innego forum poprostu bo tam jakbym napisał nazwe tej stronki to by mnie posądzili o łamanie regulaminu prisonwars hehe
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
no nie tylko to, są też np. współrzędne kliknięcia myszką i takie bajery, ale nie w tym tkwi problem, chodzi o to że często php zapisuje plik dopiero jak skrypt się cały wykona czy COOKIEJAR zostanie zapisane dopiero po zalogowaniu dlatego logowanie i odczytanie zawartości trzeba rozpisań na dwa skrypty, ma to też inne uzasadnienie gdyż jak domyślam się kolega pisze bota, dziwnie to będzie wyglądać jak zamiast odświeżać stronę bot będzie co pięć sekund się logował od nowa

a tu jak ja to zrobiłem:
plik logowanie.php
Kod:
<?php
$link=curl_init('http://prisonwars.pl/');
curl_setopt($link, CURLOPT_POSTFIELDS, 'log_in=1&login=nowy_me&password=83wcay&x='.(57+rand(-4, 4)).'&y='.(22+rand(-4, 4)));
curl_setopt($link, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($link, CURLOPT_REFERER, 'http://prisonwars.pl/');
curl_setopt($link, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
przegladarka($link);
$strona=curl_exec($link);
curl_close($link);

header('Location: zalogowany.php');

function przegladarka(&$link)
{
    $przegladarka='User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5';
    $naglowki=array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                    'Accept-Language: pl,en-us;q=0.7,en;q=0.3',
                                    'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7');
    
    curl_setopt($link, CURLOPT_USERAGENT, $przegladarka);
    curl_setopt($link, CURLOPT_ENCODING, '');
    curl_setopt($link, CURLOPT_HTTPHEADER, $naglowki);
}
?>
i teraz po zalogowaniu skrypt przechodzi do skryptu zalogowany.php
Kod:
<?php
$link=curl_init('http://prisonwars.pl/');
curl_setopt($link, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($link, CURLOPT_REFERER, 'http://prisonwars.pl/');
curl_setopt($link, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
przegladarka($link);
$strona=curl_exec($link);
curl_close($link);

echo $strona;

function przegladarka(&$link)
{
    $przegladarka='User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5';
    $naglowki=array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                    'Accept-Language: pl,en-us;q=0.7,en;q=0.3',
                                    'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7');
    
    curl_setopt($link, CURLOPT_USERAGENT, $przegladarka);
    curl_setopt($link, CURLOPT_ENCODING, '');
    curl_setopt($link, CURLOPT_HTTPHEADER, $naglowki);
}
?>
i teraz jak chcemy odświeżyć stronę to przeładowujemy tylko zalogowany.php(np. jakimś meta refresh), a logowanie.php włączymy tylko jak sesje wygaśnie czyli np. zalogujemy się też przez przeglądarkę
 

qw3rt^

Użytkownik
Dołączył
Kwiecień 21, 2007
Posty
20
dzieki wielgachne :p ale mógłbyś wyjaśnić tak troszke dogłębniej te linijke z danymi? Co oznaczają te współrzędnymi kliknięcia? Możesz coś o tym napisać?
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
skrypt js sprawdza w jakie miejsce przycisku "loguj" kliknąłeś nigdy nie klikniesz dwa razy z rzędu w to samo miejsce, tak samo rzadko klikniesz w krawędź przycisku to takie zabezpieczenie przeciwko botom, dlatego klikasz gdzieś w środek i potem to swojego bota wpisujesz ten środek czyli np x=57 i y=22(mi się tak kliknęło) plus minus jakaś tam liczba i wtedy twój bot udaje klikanie :D
 
Do góry Bottom