Próbuję zalogować się do allegro za pośrednictwem CURLa, jednak trochę mi to nie wychodzi.
Mój kod prezentuje się tak:
<?php
$nick = 'nick';
$pass = 'pass';
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://allegro.pl/myaccount/');
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 desktopsmiley_2_2_5643778701369665_44_71 DS_gamingharbor Firefox/3.5.2 (.NET CLR 3.5.30729)');
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER,true);
curl_setopt($c, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($c, CURLOPT_COOKIEJAR, 'cookies.txt');
$p = $http_data = curl_exec($c);
$curl_info = curl_getinfo($c);
curl_close($c);
$headers = substr($http_data, 0, $curl_info["header_size"]);
preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches);
$url = $matches[1];
preg_match('"<input type=\"hidden\" id=\"userForm__token\" name=\"userForm\[_token\]\"(.*?)value=\"(.*?)\" />"si', $p, $match_userFormToken);
$userFormToken = $match_userFormToken[2];
preg_match('"<input type=\"hidden\" id=\"userForm_clientId\" name=\"userForm\[clientId\]\"(.*?)value=\"(.*?)\" />"si', $p, $match_userFormTokenCID);
$userFormTokenCID = $match_userFormTokenCID[2];
preg_match('"<input type=\"hidden\" id=\"userForm_state\" name=\"userForm\[state\]\"(.*?)value=\"(.*?)\" />"si', $p, $match_userFormTokenState);
$userFormTokenState = $match_userFormTokenState[2];
$userFormTokenState = str_replace('"', '"', $userFormTokenState);
$post = urlencode('userForm[redirectUri]=https://ssl.allegro.pl/fnd/landing-page/&userForm[clientId]='.$userFormTokenCID.'&userForm[responseType]=code&userForm[scope]=login&userForm[state]='.$userFormTokenState.'&userForm[login]='.$nick.'&userForm[password]='.$pass.'&userForm[_token]='.$userFormToken);
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'https://ssl.allegro.pl/fnd/authentication/');
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 desktopsmiley_2_2_5643778701369665_44_71 DS_gamingharbor Firefox/3.5.2 (.NET CLR 3.5.30729)');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $post);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($c, CURLOPT_HEADER,true);
curl_setopt($c, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen($post),
'Referer: '.urlencode($url),
'Host: ssl.allegro.pl',
));
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($c, CURLOPT_COOKIEJAR, 'cookies.txt');
$http_data = curl_exec($c);
$curl_info = curl_getinfo($c);
curl_close($c);
$headers = substr($http_data, 0, $curl_info["header_size"]);
preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches);
$url = $matches[1];
echo $p;
?>
Przez ten request tworzone jest 5 ciasteczek (czyli tak jak w normalnym requescie przez przeglądarkę):
- ws2,
- ws3,
- ws4,
- QXLSESSID,
- all_rct.
Po wszystkim niestety dostaję przekierowanie z powrotem na stronę logowania allegro, nie wiem dlaczego...
W przeglądarce po utworzeniu tych ciasteczek, skrypt automatycznie przekierowuje na taki link:
https://ssl.allegro.pl/fnd/landing-page/?code=JAKIS_KOD&state=JAKIS_KOD2
Problem w tym, że u mnie takie przekierowanie w skrypcie już nie następuje, a zainicjować go nie mogę, ponieważ nie wiem skąd pobierane są wartości w linku (code i state).
Spotkał się ktoś może już z tym problemem i jest w stanie mnie jakoś nakierować?
Dzięki.
PS. Allegro API mnie nie ratuje ze względu na swoje durne limity i sam fakt, że często szwankuje, więc rady dot. API mnie nie zadowalają.