Logowanie do mBanku (curl)

Odpowiedz Nowy wątek
2013-07-28 15:45

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

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.

edytowany 1x, ostatnio: Demonical Monk, 2013-07-30 20:08

Pozostało 580 znaków

.Al
2013-07-28 15:57
.Al

Rejestracja: 6 lat temu

Ostatnio: 2 miesiące temu

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)

edytowany 2x, ostatnio: .Al, 2013-07-29 15:29

Pozostało 580 znaków

2013-07-28 16:14

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

0

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

edytowany 1x, ostatnio: Demonical Monk, 2013-07-30 20:09

Pozostało 580 znaków

.Al
2013-07-28 16:24
.Al

Rejestracja: 6 lat temu

Ostatnio: 2 miesiące temu

0

może wystarczy:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
edytowany 1x, ostatnio: Demonical Monk, 2013-07-30 20:09

Pozostało 580 znaków

2013-07-28 16:41

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

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?

edytowany 1x, ostatnio: Demonical Monk, 2013-07-30 20:09

Pozostało 580 znaków

2013-07-28 17:23

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

0

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

Pozostało 580 znaków

2013-07-28 18:18

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

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.

Pozostało 580 znaków

2013-07-28 18:19

Rejestracja: 6 lat temu

Ostatnio: 5 lat temu

0

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

Pozostało 580 znaków

Odpowiedz

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