Potrzebuję napisać skrypt, który będzie się logować do określonej strony.
Strona to:
http://www.erepublik.com/en/login (IMG:
style_emoticons/default/smile.gif)
Kiedyś napisałem coś takiego w VB, jednak administracja pokombinowała i skrypt nie działa.
W VB brakło mi pomysłów, więc może ktoś w PHP coś pomoże.
Sprawa wygląda tak - wchodząc pierwszy raz na stronę pobierane jest ciastko "erpk". Ciastko to musi zostać wysłane przy logowaniu, a także takie dane jak token (ukryte w formularzu) i oczywiście login i hasło.
Poniżej mój kod:
<?php
// This page will set some cookies and we will use them for Posting in Form data.
$cookie_file_path = "cookie.txt"; // Please set your Cookie File path
$LOGINURL = "http://www.erepublik.com/en/login";
$agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$LOGINURL);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_ENCODING, '');
$headers = array('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',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec ($ch);
curl_close ($ch);
$LOGINURL = "http://www.erepublik.com/en/login";
$POSTFIELDS = "_token=6ca821b0c2630712028e90060e2b80c9&citizen_name=username&citizen_password=password&commit=Login";
$reffer = "http://www.erepublik.com/en";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$LOGINURL);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_REFERER, $reffer);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
$headers2 = array('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',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
$result = curl_exec ($ch);
curl_close ($ch);
$ch = curl_init();
?>
Odpalając go (oczywiście po podstawieniu poprawnego loginu i hasła) otrzymuję komunikat:
"CSRF attack detected".
Doszedłem mniej więcej dlaczego tak się może dziać.
Otóż wchodzimy pierwszy raz na stronę do logowania, następnie usuwam ciastko "erpk" i próbuję się zalogować - wtedy też dostaję taki komunikat.
Wniosek? Ciastka nie są przekazywane w drugim wywołaniu.
Ale dlaczego?
Będzie ktoś mi tutaj w stanie pomóc?
Ten post edytował Grzesiek23 25.12.2009, 15:22:13