IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
m93a
Neregistrovaný
Avatar
m93a:25.7.2012 13:46

Ahoj všichni. Chtěl jsem udělat něco jako neoficiální API pro server Strava.cz (login, objednání, logout), ale narazil jsem na následující problém - když zadám přihlašovací údaje, funkce strava_czLogin() vrátí true a SessionID, ale když to SessionID předám funkci strava_czCheck(), vrátí chybu a chová se, jako bych se nikdy nepřihlásil. Nevím, co s tím - už jsem se ptal i na StackOverflow.

Zde je kód:

function strava_czLogin($machine,$user,$pass){
//Sends the request
$src = file_get_contents(
            'http://m.strava.cz/Stravnik/formprihlaseni.aspx',
            false,
            stream_context_create(
             array('http'=>array('header' => "User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\n"))
            )
           );
$src = mb_convert_encoding($src,'utf-8','auto'); //Encoding correction

//Works with the cookies (yummy!)
$cookies = array();
foreach ($http_response_header as $value) {
    if (preg_match('/^Set-Cookie:\s*([^;]+)/', $value, $matches)) {
        parse_str($matches[1], $tmp);
        $cookies += $tmp;
    }
}

$sessionId = "";
foreach ($cookies as $key => $value) {
    if ($key == "ASP_NET_SessionId"){$sessionId = $value;}
}

//Checks the result and returns the sessionId
if (preg_match('<form name="aspnetForm" method="post" action="stravnik.aspx" id="aspnetForm">',$src)){
     return array(true,$sessionId);
    }else{
     return array(false,null);
    }
}

function strava_czCheck($sessionId){
    //Sends request
    $src = file_get_contents('http://m.strava.cz/Stravnik/objednavky.aspx',false,stream_context_create(array('http'=>array('header' => "User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\nCookie: ASP_NETSession=".$sessionId."\r\n"))));
    $src = mb_convert_encoding($src,'utf-8','auto'); //Zajistí správné kódování
    echo $src; //Prints the response - "Application Error"

    //Some irrelevant code here


    //Returns the result
    if ($arr==null) {return array(false,null);}
    else {return array(true,$arr);}
}

PS: V browseru vše funguje bez problémů.

 
Odpovědět
25.7.2012 13:46
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:25.7.2012 14:39

No vypadá to docela rozumně... a jestli nepomohli na stacku... :D

Evidentně má ASP ještě nějakou kontrolu, která u tebe selhává. Zkusil bych si nasimulovat tento kód tak, aby vypadal jako tvůj prohlížeč a poté zkoušel kombinovat, kde je chyba. Např. se přihlásit z browseru, kouknout do cookie a poté zavolat strava_czCheck. Nebo si jsi jistý, že strava_czCheck funguje?

Nahoru Odpovědět
25.7.2012 14:39
New kid back on the block with a R.I.P
Avatar
thirdknown
Člen
Avatar
thirdknown:31.1.2013 9:06

Nevím, jestlis tenhle problém už nevyřešil.
Zkus cURL a nezapomeň přidat tohle:

curl_setopt($cur­l_connection, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($cur­l_connection, CURLOPT_COOKIEJAR, "cookie.txt");

Já měl ten soubor s cookies v easyphp ve složce ./apache stabilně.
Samozřejmě sem nedělal strava.cz, ale jinej web. Cookies sem nemusel ošetřovat kódově, o vše se postaral můj server.

 
Nahoru Odpovědět
31.1.2013 9:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.