i have code that dont work for me and I dont know where is the problem. Please if somebody can review and tell me where is mistake. Thanks.
I want to log in into http://www.msmobile.rs/korisnik/prijava website, code is bellow:
<?php
// urls to call - the login page and the secured page
$urlLogin = "http://www.msmobile.rs/korisnik/prijava";
$urlSecuredPage = "http://www.msmobile.rs";
// POST names and values to support login
$nameUsername='ctl00$MainContent$EMail'; // the name of the username textbox on the login form
$namePassword='ctl00$MainContent$Lozinka'; // the name of the password textbox on the login form
$nameLoginBtn='ctl00$MainContent$Prijavise'; // the name of the login button (submit) on the login form
$valUsername ='XXXX'; // the value to submit for the username
$valPassword ='YYYY'; // the value to submit for the password
$valLoginBtn ='Prijavi se'; // the text value of the login button itself
// the path to a file we can read/write; this will
// store cookies we need for accessing secured pages
$cookieFile = 'cookie.txt';
// regular expressions to parse out the special ASP.NET
// values for __VIEWSTATE and __EVENTVALIDATION
$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i';
$regexEventVal = '/__EVENTVALIDATION\" value=\"(.*)\"/i';
$regexLastFoc = '/__LASTFOCUS\" value=\"(.*)\"/i';
$regexEventTar = '/__EVENTTARGET\" value=\"(.*)\"/i';
$regexEventArg = '/__EVENTARGUMENT\" value=\"(.*)\"/i';
$regexViewstateGen = '/__VIEWSTATEGENERATOR\" value=\"(.*)\"/i';
/************************************************
* utility function: regexExtract
* use the given regular expression to extract
* a value from the given text; $regs will
* be set to an array of all group values
* (assuming a match) and the nthValue item
* from the array is returned as a string
************************************************/
function regexExtract($text, $regex, $regs, $nthValue)
{
if (preg_match($regex, $text, $regs)) {
$result = $regs[$nthValue];
}
else {
$result = "";
}
return $result;
}
/************************************************
* initialize a curl handle; we'll use this
* handle throughout the script
************************************************/
$ch = curl_init();
/************************************************
* first, issue a GET call to the ASP.NET login
* page. This is necessary to retrieve the
* __VIEWSTATE and __EVENTVALIDATION values
* that the server issues
************************************************/
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);
// from the returned html, parse out the __VIEWSTATE and
// __EVENTVALIDATION values
$viewstate = regexExtract($data,$regexViewstate,$regs,1);
$eventval = regexExtract($data, $regexEventVal,$regs,1);
$regexLastFoc = regexExtract($data, $regexLastFoc,$regs,1);
$regexEventTar = regexExtract($data, $regexEventTar,$regs,1);
$regexEventArg = regexExtract($data, $regexEventArg,$regs,1);
$regexViewstateGen = regexExtract($data, $regexViewstateGen,$regs,1);
/************************************************
* now issue a second call to the Login page;
* this time, it will be a POST; we'll send back
* as post data the __VIEWSTATE and __EVENTVALIDATION
* values the server previously sent us, as well as the
* username/password. We'll also set up a cookie
* jar to retrieve the authentication cookie that
* the server will generate and send us upon login.
************************************************/
$postData = '__VIEWSTATE='.rawurlencode($viewstate)
.'&__EVENTVALIDATION='.rawurlencode($eventval)
.'&__LASTFOCUS='.rawurlencode($regexLastFoc)
.'&__EVENTTARGET='.rawurlencode($regexEventTar)
.'&__EVENTARGUMENT='.rawurlencode($regexEventArg)
.'&___VIEWSTATEGENERATOR='.rawurlencode($regexViewstateGen)
.'&'.$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);
/************************************************
* with the authentication cookie in the jar,
* we'll now issue a GET to the secured page;
* we set curl's COOKIEFILE option to the same
* file we used for the jar before to ensure the
* authentication cookie is sent back to the
* server
************************************************/
curl_setOpt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_URL, $urlSecuredPage);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
$data = curl_exec($ch);
// at this point the secured page may be parsed for
// values, or additional POSTS made to submit parameters
// and retrieve data. For this sample, we'll just
// echo the results.
/************************************************
* that's it! Close the curl handle
************************************************/
curl_close($ch);
?>
Thanks in advance, Petar