Autor Zpráva
watchick
Profil
Zdravím,
potřeboval bych se přihlásit na stránku https://cabinet.fxopen.com/Login.aspx
Přes CURL se normálně na stránku dostanu a umím odesílat POST dotazy, nicméně tento způsob přihlašování vůbec nechápu a nemohu se dohledat, které údaje a kam mám odeslat.

Nemáte někdo náhodou funkční příklad přihlášení na ASPX stránku?

Díky
Keeehi
Profil
watchick:
Problém nespíš nebude v aspx, ale v https. Můžete vyzkoušet toto.

Jinak z vlastní zkušenosti vím, že pro aspx bude nejspíše důležitá i proměnná __VIEWSTATE.
watchick
Profil
Keeehi:
S HTTPS problém nemám (přes to se dostanu v pohodě), ale ano, následující parametry jsou odesílány:
__EVENTARGUMENT
__VIEWSTATE
__EVENTVALIDATION

Přičemž první 2 argumenty jsou prázdné.
Ale nějak se nemohu dopátrat toho, jak ten EVENTVALIDATION získám?

Díky moc!
watchick
Profil
$html = open_https_url("https://cabinet.fxopen.com/Login.aspx",array(),true);
$ex = explode('name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="',$html);
$ex2 = explode('"',$ex[1]);
$postArray = array();
$postArray['__EVENTVALIDATION'] = $ex2[0];
$postArray['__EVENTARGUMENT'] = '';
$postArray['__VIEWSTATE'] = '';
$postArray['__EVENTTARGET'] = '';
$postArray['ctl00$ContentPlaceHolder1$Login1$UserName'] = '***';
$postArray['ctl00$ContentPlaceHolder1$Login1$Password'] = '***';
$postArray['ctl00$ContentPlaceHolder1$Login1$LoginButton'] = 'Log In';
echo open_https_url("https://cabinet.fxopen.com/Login.aspx",$postArray,true);
function open_https_url($url,$post = array(),$usecookie = false) {
    if ($usecookie) {
        if (file_exists($usecookie)) {
            if (!is_writable($usecookie)) {
                return "Can't write to $usecookie cookie file, change file permission to 777 or remove read only for windows.";
            }
        } else {
            $usecookie = "cookie.txt";
            if (!is_writable($usecookie)) {
                return "Can't write to $usecookie cookie file, change file permission to 777 or remove read only for windows.";
            }
        }
    }
    $ch = curl_init();
if(!empty($post))
{
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_POSTFIELDS    ,$post);
}
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    if ($usecookie) {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
    }
    if ($refer != "") {
        curl_setopt($ch, CURLOPT_REFERER, $refer );
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   $result =curl_exec ($ch);
   curl_close ($ch);
   return $result;
}



Nicméně tohle vrací:
HTTP/1.1 100 Continue

HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 156
Content-Type: text/html; charset=utf-8
Location: /Warning.aspx?aspxerrorpath=/Login.aspx
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Fri, 15 Apr 2011 19:17:17 GMT
Keeehi
Profil
$html = open_https_url("https://cabinet.fxopen.com/Login.aspx","",true);

preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~',$html,$matches_eventvalidation);
preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~',$html,$matches_viewstate);

$postArray['__EVENTVALIDATION'] = $matches_eventvalidation[1];
$postArray['__EVENTARGUMENT'] = '';
$postArray['__VIEWSTATE'] = $matches_viewstate[1];
$postArray['__EVENTTARGET'] = '';
$postArray['ctl00$ContentPlaceHolder1$Login1$UserName'] = '***';
$postArray['ctl00$ContentPlaceHolder1$Login1$Password'] = '***';
$postArray['ctl00$ContentPlaceHolder1$Login1$LoginButton'] = 'Log In';

echo open_https_url("https://cabinet.fxopen.com/Login.aspx",$postArray,true);



function open_https_url($url,$post = array(),$usecookie = false) {
    if ($usecookie) {
        if (file_exists($usecookie)) {
            if (!is_writable($usecookie)) {
                return "Can't write to $usecookie cookie file, change file permission to 777 or remove read only for windows.";
            }
        } else {
            $usecookie = "cookie.txt";
            if (!is_writable($usecookie)) {
                return "Can't write to $usecookie cookie file, change file permission to 777 or remove read only for windows.";
            }
        }
    }
    $ch = curl_init();
if(!empty($post))
{
 curl_setopt($ch, CURLOPT_POST      ,1);
 curl_setopt($ch, CURLOPT_POSTFIELDS    ,$post);
}
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    if ($usecookie) {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
    }
    if ($refer != "") {
        curl_setopt($ch, CURLOPT_REFERER, $refer );
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   $result =curl_exec ($ch);
   curl_close ($ch);
   return $result;
}

Ovšem nevím, co si slibujete od file_exists($usecookie), když v $usecookie máte true nebo false. Takže si s tím něco udělejte. Ale řekl bych, že při přihlašování cookies možná nebudou třeba odesílat.
watchick
Profil
Keeehi: úpravy vrací:
HTTP/1.1 100 Continue

HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 156
Content-Type: text/html; charset=utf-8
Location: /Warning.aspx?aspxerrorpath=/Login.aspx
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Sat, 16 Apr 2011 15:42:22 GMT

Takže bohužel stále nefunguje
Jinak díky za upozornění, tuto funkci jsem zkopíroval, a nevěnoval jsem jí moc pozornosti.
Díky za opravu
Keeehi
Profil
watchick:
Asi takto: Bez uživatelského jména a hesla Vám nedokážu pomoct. Ani nevím, o čem ta stránka je. Mohu Vám tak akorát popsat postup který používám, když se chci takto někam přihlásit.

Používám doplněk pro firefox LiveHTTPheaders. Vlezu na přihlašovací formulář, zadám potřebné údaje a nechám se přihlásit. V LiveHTTPheaders vidím, jaké všechny údaje prohlížeč odesílal. Pak si vytvořím script, který generuje úplně stejný požadavek. Ten script nepracuje automaticky. Všechna data jsou v něm napevno zadaná (třeba cookies odesílá takto: curl_setopt($ch, CURLOPT_COOKIE,"ASP.NET_SessionId=fxdgdfgdgsdhs"); ). Ve většině případů se povede přihlásit (pokud se něco pokaždé mění a bez toho se nedá přihlásit, pak je potřeba to tedy automaticky zjišťovat, ale většinou to potřeba není). Po tom, co se mi přihlášení povede začínám experimentovat, co všechno je k přihlášení potřeba. Vždy smažu třeba jednu cookie a zjistím, zda se stále můžu přihlásit, nebo to byla potřebná cookie. Nakonec mi tedy zůstanou jen ty potřebné údaje, které musím odeslat a na jejich zjištění si napíšu nějaký kód.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: