2

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

Andrew
  • 18,680
  • 13
  • 103
  • 118
  • 1
    Possible duplicate of [Login to remote site with PHP cURL](https://stackoverflow.com/questions/3008817/login-to-remote-site-with-php-curl) – Andrew Apr 06 '18 at 13:04

0 Answers0