CURL allegro - probelm z zalogowaniem się

0

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('&quot;', '"', $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ą.

0

Javascriptem pewnie są generowane.

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ą.

I serio chce Ci się pisać serwis, który w kilka dni Ci zbanują? :)

Wiem, że jakikolwiek kontakt z allegro to droga przez mękę, ale spróbuj się z nimi skontaktować, wyjaśnij przyczyny kontaktu i poproś o zwiększenie limitów.

0

Nie mają powodów do tego, aby mi go banować.
Jedyne co chcę zrobić to sprawdzać czy ktoś kupił u mnie jakiś towar i czy za niego zapłacił. jeśli tak to potrzebuję adres e-mail takiego kogoś i w sumie tyle.
Serwisy typu atuomater.pl, intralogic.eu właśnie tak działają, że logują się na konta i są w stanie wykryć takie płatności i nie są banowane.

Javascript nie ma nic do rzeczy - wyłączyłem js w przeglądarce i normalnie się zalogowałem do allegro, więc to nie to.

0

No to analizuj krok po kroku logowanie devtoolsami. Albo zobacz, czy nie ma gdzieś na necie gotowca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1