Logowanie do mBanku (curl)

0

Witam.

Siedzę nad tym problemem już dłuższy czas i nie mogę wybrnąć :)

Otóż przy logowaniu do mbanku przesyłam (wydaje mi się wszystkie poprawne dane tzn. content + cookies) ale wciąż jest coś nie tak.

Otrzymuje komunikat: Object moved to here.

Zdaje się, że coś jest nie tak z cookies, ale nie wiem dokładnie co mogłoby to być.

Proszę o pomoc.

0

może porostu chodzi o przekierowanie? włącz przekierowania albo wyciągnij adres z nagłówka i obsłuż przekierowanie (albo ze źródła strony, jak jest)

0

Faktycznie jest przekierowanie z logon.aspx na frames.aspx tylko pytanie jak to teraz obsłużyć?

0

może wystarczy:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
0
 
<?php

error_reporting(E_ALL); 
ini_set('display_errors','1');
include('simple_html_dom.php');
/**
 * @param cURL  $ch                     - uchwyt do cURL
 * @param int   $redirects              - przekierowania
 * @param bool  $curlopt_returntransfer - CURLOPT_RETURNTRANSFER
 * @param int   $curlopt_maxredirs      - CURLOPT_MAXREDIRS
 * @param bool  $curlopt_header         - CURLOPT_HEADER
 * @return mixed
 */

 function curl_redirect_exec($ch, &$redirects, $curlopt_returntransfer = false, $curlopt_maxredirs = 10, $curlopt_header = false) {
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $exceeded_max_redirects = $curlopt_maxredirs > $redirects;
    $exist_more_redirects = false;
    if ($http_code == 301 || $http_code == 302) {
        if ($exceeded_max_redirects) {
            list($header) = explode("\r\n\r\n", $data, 2);
            $matches = array();
            preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
            $url = trim(array_pop($matches));
            $url_parsed = parse_url($url);
            if (isset($url_parsed)) {
                curl_setopt($ch, CURLOPT_URL, $url);
                $redirects++;
                return curl_redirect_exec($ch, $redirects, $curlopt_returntransfer, $curlopt_maxredirs, $curlopt_header);
            }
        }
        else {
            $exist_more_redirects = true;
        }
    }
    if ($data !== false) {
        if (!$curlopt_header)
            list(,$data) = explode("\r\n\r\n", $data, 2);
        if ($exist_more_redirects) return false;
        if ($curlopt_returntransfer) {
            return $data;
        }
        else {
            echo $data;
            if (curl_errno($ch) === 0) return true;
            else return false;
        }
    }
    else {
        return false;
    }
}

/*****************************logowanie*****************************/
	$url  = 'https://www.mbank.com.pl/';
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30');
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($c, CURLOPT_COOKIEFILE,'cookies.txt');
    curl_setopt($c, CURLOPT_COOKIEJAR,'cookies.txt');
	curl_setopt($c, CURLOPT_HEADER, 1);
	$s=curl_exec($c);
    curl_close($c);
	//echo $s;
	
	$r = new simple_html_dom();
	$r = str_get_html($s);
	$r = $r->find('input[name=seed]');

	$seed = $r[0]->value;
	$d=date('d');
	$tmp=date('n');
	switch ($tmp) {
    case 1:
        $m='styczeń';
        break;
    case 2:
        $m='luty';
        break;
    case 3:
        $m='marzec';
        break;
	case 4:
        $m='kwiecień';
        break;
	case 5:
        $m='maj';
        break;
    case 6:
        $m='czerwiec';
        break;
    case 7:
        $m='lipiec';
        break;
	case 8:
        $m='sierpień';
        break;
	case 9:
        $m='wrzesień';
        break;
    case 10:
        $m='październik';
        break;
    case 11:
        $m='listopad';
        break;
	case 12:
        $m='grudzień';
        break;
}
	$y=date('Y');
	$hh=date('H');
	$mm=date('i');
	$ss=date('s');
	
	$r = str_get_html($s);
	$r = $r->find('input[name=__STATE]');
	$state = $r[0]->value;
	
	$r = str_get_html($s);
	$r = $r->find('input[name=__EVENTVALIDATION]');
	$event = $r[0]->value;
	
	$seed=str_replace(':','%3A',$seed);
	$seed=str_replace('=','%3D',$seed);
	$seed=str_replace('/','%2F',$seed);
	$seed=str_replace('+','%2B',$seed);
	
	$state=str_replace(':','%3A',$state);
	$state=str_replace('=','%3D',$state);
	$state=str_replace('/','%2F',$state);
	$state=str_replace('+','%2B',$state);
	
	$event=str_replace(':','%3A',$event);
	$event=str_replace('=','%3D',$event);
	$event=str_replace('/','%2F',$event);
	$event=str_replace('+','%2B',$event);
	
    $redirects = 0;
	
	$url  = 'https://www.mbank.com.pl/logon.aspx';
	$content='seed='.$seed.'&localDT='.$d.'+'.$m.'+'.$y.'+'.$hh.'%3A'.$mm.'%3A'.$ss.'&__PARAMETERS=&__STATE='.$state.'&__VIEWSTATE=&__EVENTVALIDATION='.$event.'&customer=login&password=haslo';
	//echo $content;
	$cookies = file('cookies.txt');
	$cookie1=explode("\t",$cookies[4]);
	$cookie2=explode("\t",$cookies[5]);
	$cookie3=explode("\t",$cookies[6]);
	$cookie1=trim($cookie1[5]).'='.trim($cookie1[6]).'; ';
	$cookie2=trim($cookie2[5]).'='.trim($cookie2[6]).'; ';
	$cookie3=trim($cookie3[5]).'='.trim($cookie3[6]).'; ';
	$cookie = $cookie2.$cookie1.$cookie3;
	echo $cookie;
    $c2 = curl_init();
    curl_setopt($c2, CURLOPT_URL, $url);
    curl_setopt($c2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30');
    curl_setopt($c2, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c2, CURLOPT_POST, 1);
    curl_setopt($c2, CURLOPT_POSTFIELDS, $content);
    curl_setopt($c2, CURLOPT_COOKIE,$cookie);
	curl_setopt($c2, CURLOPT_HEADER, 1);
	curl_redirect_exec($c2, $redirects);
	$s2=curl_exec($c2);
    curl_close($c2);
	echo $s2;
?>

Tak wygląda cały mój kod, zamiast CURLOPT_FOLLOWLOCATION używam funkcji curl_redirect_exec, niestety w efekcie otrzymuję pustą stronę :(

Co robię źle?

0

Ma ktoś jakiś pomysł? :) Ja już kompletnie zbaraniałem...

0

Problem rozwiązany.

Należy złożyć ciacho z cookie2.cookie1.tmp (tmp zamiast cookie3).

Ciacho, które nazwałem tmp znajduje się w zmiennej $s2 trzeba je tylko wyjąć (jest to ciacho mBank2 jak się okazuje inne niż cookie3).

Całe tak spreparowane ciacho podajemy dla url: https://www.mbank.com.pl/accounts_list.aspx i mamy wszystko co potrzeba.

0

Swoją drogą dziękuję za pomoc co prawda obsługiwać przekierowania jak się okazuje nie potrzeba :)

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