| Autor | Zpráva | ||
|---|---|---|---|
| watchick Profil |
#1 · Zasláno: 14. 4. 2011, 16:18:12
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 |
#2 · Zasláno: 15. 4. 2011, 18:42:54
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 |
#3 · Zasláno: 15. 4. 2011, 20:25:39
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 |
#4 · Zasláno: 15. 4. 2011, 21:14:07 · Upravil/a: watchick
$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 |
#5 · Zasláno: 15. 4. 2011, 22:33:07 · Upravil/a: Keeehi
$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 |
#6 · Zasláno: 16. 4. 2011, 17:43:34 · Upravil/a: watchick
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 |
#7 · Zasláno: 17. 4. 2011, 10:14:04
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.
|
||
|
Časová prodleva: 15 let
|
|||
0