Avatar
m93a
Neregistrovaný
Avatar
m93a:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na m93a
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
thirdknown
Člen
Avatar
thirdknown:

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.