Witam,
pracuję obecnie nad prostym skryptem to logowania do banku iPKO na prywatny użytek, jednak mam problem z przejściem całego procesu logowania, mój obecny kod wygląda następująco:
$login='LOGINNNNNNNN';
$haslo='HASLOOOOOOOO';
$c=curl_init();
curl_setopt($c, CURLOPT_URL, 'https://www.ipko.pl');
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($c, CURLOPT_CAINFO, 'cert.pem');
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');
$headers=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','Connection: Keep-Alive');
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
curl_setopt($c, CURLOPT_ENCODING, '');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HEADER, 1);
$page=curl_exec($c);
curl_close($c);
$ex1=explode('Set-Cookie: ',$page);
$ex2=explode(';',$ex1[1]);
$cookie=$ex2[0];
sleep(mt_rand(3,5));
$c=curl_init();
curl_setopt($c, CURLOPT_URL, 'https://www.ipko.pl/secure/ikd3/api/login');
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($c, CURLOPT_CAINFO, 'cert.pem');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, '{"_method":"POST","version":2,"seq":1,"location":"","request":{"state":"login","data":{"login":"'.$login.'"}}}');
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');
$headers=array('Content-Type: application/json','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','Connection: Keep-Alive','Cookie: '.$cookie);
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
curl_setopt($c, CURLOPT_ENCODING, '');
//curl_setopt($c, CURLOPT_REFERER, 'https://www.ipko.pl');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HEADER, 1);
$page=curl_exec($c);
curl_close($c);
$ex1=explode('"sid": "',$page);
$ex2=explode('"',$ex1[1]);
$sid=$ex2[0];
$ex1=explode('"flow_id": "',$page);
$ex2=explode('"',$ex1[1]);
$flow=$ex2[0];
sleep(mt_rand(3,5));
$c=curl_init();
curl_setopt($c, CURLOPT_URL, 'https://www.ipko.pl/secure/ikd3/api/login');
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($c, CURLOPT_CAINFO, 'cert.pem');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, '{"_method":"PUT","sid":"'.$sid.'","version":2,"seq":2,"location":"","request":{"state":"password","flow_id":"'.$flow.'","first_prelogin":true,"data":{"password":"'.$haslo.'"}}}');
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');
$headers=array('x-ias-ias_sid: '.$sid, 'Content-Type: application/json','Accept-Language: pl,en-us;q=0.7,en;q=0.3','Accept-Encoding: gzip, deflate, br','Connection: Keep-Alive','Cookie: '.$cookie);
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
curl_setopt($c, CURLOPT_ENCODING, '');
curl_setopt($c, CURLOPT_REFERER, 'https://www.ipko.pl/login.html');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HEADER, 1);
$page=curl_exec($c);
curl_close($c);
echo $page;
Problem dotyczy generalnie ostatniego połączenia, ponieważ wynikiem jest informacja o nieznanym błędzie aplikacji.
Od razu nie pragnę nadmienić, że nie szukam gotowca - jeżeli komuś się nudzi w sobotę to czemu nie, ale jeżeli nie, to będę wdzięczny za wszelkie wskazówki. Dodam tylko, że próbowałem dodawać kilka opcji do headeru ostatniego zapytania (dlatego różni się od poprzednich) ale bez efektu.