Automatyczne logowanie do Allegro.pl CURL

0

Napisalem skrypt do logowania sie do Allegro przez Curl:

$sessions = curl_init();
curl_setopt($sessions,CURLOPT_URL,'https://ssl.allegro.pl/enter_login.php');
curl_setopt($sessions, CURLOPT_POST, 1);
curl_setopt($sessions,CURLOPT_POSTFIELDS,'user_login=uzytkownik&user_password=haslo');
curl_setopt($sessions, CURLOPT_HEADER , 1);
curl_setopt($sessions, CURLOPT_COOKIEFILE, './cookie.txt');
curl_setopt($sessions, CURLOPT_COOKIEJAR,'./cookie.txt');
curl_setopt($sessions, CURLOPT_RETURNTRANSFER,1);
$a = curl_exec($sessions);
echo $a;
curl_close($sessions);

,ale mam problem jak uzupełnij ukryte pola? :


 <input type="hidden" name="global_login_hash" value="08591269f8b166e787ec0da2b050d92d0a34e7bc" />
  <input type="hidden" name="session" value="YmRmZgYHUAYBUVJeVgACC1MHUgJQVwIFVwBfA1JWUVcBUFRfUwsEBVtWBVRSBgFTU1NVVVMCYzM0Mg==" />
  <input type="hidden" name="session_login_hash" value="c31d8fb15174c9575db1b6082d65466a7b8efb70" />
  <input type="hidden" name="url" value="ODdjNF8XEEICGExVWw8BVUpYTURbTAlLWVQAW0INEB03Y2Qy" />
  <input type="hidden" name="cod" value="OGZkZlVlNmJk" />

1

Użyj API zamiast kombinować?

http://allegro.pl/webapi/

0

Dokładnie, najlepiej api lub przed zalogowaniem wchodzi na tą stronę, odczytujesz wartości pól które wkleiłeś ('hidden') i je też puszczasz w poście.

0

Api allegro ma awarie praktycznie każdego dnia. Jednego dnia funkcja działa dobrze, drugiego nie działa wcale albo zwraca przekłamane wyniki (potwierdzone na formu supportu przez pracowników allegro, żeby nie było że sobie wymyślam). Nie da się ze spokojnie pracować w operciu o API allegro, jedna opcja to przejść przez interfejs webowy :/

0

A oto porządny skrypt do tego celu:

$login = 'login_allegro';
$password = 'hasło_allegro';

require_once 'HTTP/Request2.php';
require_once 'HTTP/Request2/Observer/Log.php';

$request = new HTTP_Request2;
$request->setCookieJar();

$request->setConfig('ssl_verify_peer', false );
//$request->setConfig('ssl_verify_host', false );
$request->setConfig('store_body', true );
$request->setConfig('follow_redirects', true );
$request->setUrl('https://ssl.allegro.pl/fnd/authentication/');
$response = $request->send();

// form..
$dom = new DOMDocument;
@$dom->loadHTML( $response->getBody());

$action = '';
$params = array();

$form = $dom->getElementById('auth-form');
$action = $form->getAttribute('action');
$inputs = $form->getElementsByTagName('input');
for ( $i = 0; $i < $inputs->length; $i++ ) {
	$input = $inputs->item( $i );
	$name = $input->getAttribute('name');
	$value = $input->getAttribute('value');
	$params[ $name ] = $value;
}

$params['userForm[login]'] = $login;
$params['userForm[password]'] = $password;

$request->setUrl('https://ssl.allegro.pl/fnd/authentication/');
$request->setMethod( HTTP_Request2::METHOD_POST );
$request->addPostParameter( $params );
$response = $request->send();

// redirect
$dom = new DOMDocument;
@$dom->loadHTML( $response->getBody());

$anchors = $dom->getElementsByTagName('a');
$url = $anchors->item(0)->getAttribute('href');

$request->setMethod( HTTP_Request2::METHOD_GET );
$request->setUrl( $url );
$response = $request->send();

// panel
$request->setMethod( HTTP_Request2::METHOD_GET );
$request->setUrl('http://allegro.pl/myaccount/sell.php');
$response = $request->send();

echo $response->getBody();
0

nawet nie wiem jak skomentować te includy (require)...

0
  1. Ja mu się nie dziwię że nie chce używać api z allegro to porażka :D
  2. Na api masz ograniczoną ilość zapytań :D jak sobie pobierzesz to prosto ze strony wystarczy że będziesz sobie to parował i gotowe :D jedyna wada że więcej danych pobierasz.
  3. @gox to nie są awarie... połowa dokumentacji wygląda tak że metoda nie działała poprawnie (wdł. dokumentacji) użytkownik na forum to zgłosił (opisując jak działa) a allegro przekleiło post do dokumentacji xD
require_once 'HTTP/Request2.php';
require_once 'HTTP/Request2/Observer/Log.php';

I skąd niby mamy to wziąć?
4. @kiciakot nie używaj strinag tylko tablic, będzie ci prościej tzn nie

'user_login=uzytkownik&user_password=haslo'

tylko $POST=array();
$POST['user_login']='uzytkownik';
$POST['user_password']='haslo';


i podobnie z hidden'ami tzn jak masz 
` <input type="hidden" name="global_login_hash" value="08591269f8b166e787ec0da2b050d92d0a34e7bc" />`
```php
$POST['global_login_hash']='08591269f8b166e787ec0da2b050d92d0a34e7bc';

co do wyciągania wartości z input'ów to najprościej było by Ci robić regexpem

0

api allegro to kpina jest. Nie widziałem nigdy wcześniej tak wielu bagów w jednym produkcyjnym projekcie. No masakra. Może teraz się poprawiło, ale kiedyś szukając rozwiązania problemu na ich forum, prawie zawsze okazywało się, że jest błąd w api.

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