Autor Zpráva
Holiz
Profil *
Zdravím,

pokouším se přihlásit na stránku dělanou v ASP.NET přes cURL. Používám na to tento script.

Ten odesílá hidden proměnné "__VIEWSTATE" a "__EVENTVALIDATION". Eventvalidation jsem zrušil, nepotřebuji ho odesílat, ale potřebuji odesílat další 3 jiné hidden pole (konkrétně se jmenují "__EVENTTARGET", "__EVENTARGUMENT" a "__LASTFOCUS".

Tady jsem ale narazil, script je neodesílá. Máte nějaký nápad, proč se neodesílají?

PS.: Script jsem očistil od poznámek autora, aby sem byl kratší.

<?php
$urlLogin = "http://www.xxx.cz/login.aspx";
$urlSecuredPage = "http://www.xxx.cz/uvod.aspx";

$nameUsername='ctl00$cphmain$TextBoxjmeno';
$namePassword='ctl00$cphmain$TextBoxHeslo'; 
$nameLoginBtn='ctl00$cphmain$ButtonPrihlas';
$valUsername ='*';
$valPassword ='*';
$valLoginBtn ='Přihlásit';

$cookies = 'cookie.txt';

$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i';

function regexExtract($text, $regex, $regs, $nthValue)
{
if (preg_match($regex, $text, $regs)) {
 $result = $regs[$nthValue];
}
else {
 $result = "";
}
return $result;
}

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data=curl_exec($ch);

$viewstate = regexExtract($data,$regexViewstate,$regs,1);
$eventtarget = "";
$eventargument = "";
$lastfocus = "";

$postData = '__VIEWSTATE='.rawurlencode($viewstate)
          .'&__EVENTTARGET='.$eventtarget
          .'&__EVENTARGUMENT='.$eventargument
          .'&__LASTFOCUS='.$lastfocus
          .'&'.$nameUsername.'='.$valUsername
          .'&'.$namePassword.'='.$valPassword
          .'&'.$nameLoginBtn.'='.$valLoginBtn
          ;

curl_setOpt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_URL, $urlLogin);   
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);     

$data = curl_exec($ch);

curl_setOpt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_URL, $urlSecuredPage);   
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);     

$data = curl_exec($ch);

echo $data;
curl_close($ch);
?>


Děkuji.
juriad
Profil
Holiz:
Jak (kterým nástrojem) jsi zjistil, že je neodesílá?
A není to spíš tak, že je odesílá, ale jejich hodnota je prázdná? Hodnoty přiřazuješ na řádcích 36 -- 38.
Holiz
Profil *
To jsem zapomněl zmínit, omlouvám se. Mají být prázdné. Když se přihlásím ručně je ve zdrojovém kódu

<div class="aspNetHidden">
<form method="post" action="uvod.aspx" id="formbaka">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" />
</div>

Hodnotu viewstate jsem smazal, ostatní jsou takhle prázdné. Akorát teď koukám že tam nevidím ten lasfocus.
No a když se přihlásím přes script, tak mi to na tom místě vyhodí


<form method="post" action="uvod.aspx" id="formbaka">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="" />

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: