[EMAIL PROTECTED] wrote: > > > ----- Original Message ----- > From: "cosminx2003" > > Hi, i want to login on yahoo with php cURL, i made a script but i > can't make it work fine (it gives me blank page). > Please tell me how can i fix it. > Thanks > > <?php > > $username = "user"; > $password = "pass"; > $ch = curl_init(); > > curl_setopt ($ch, CURLOPT_URL, 'http://login.yahoo.com/config/login? > <http://login.yahoo.com/config/login?>'); > curl_setopt ($ch, CURLOPT_POST, 1); > curl_setopt ($ch, CURLOPT_POSTFIELDS, > "login=$username&passwd=$password&.src=&.tries=5&.bypass=&.partner=&.md5=&.hash=&.intl=us&.tries=1&.challenge=ydKtXwwZarNeRMeAufKa56.oJqaO&.u=dmvmk8p231bpr&.yplus=&.emailCode=&pkg=&stepid=&.ev=&hasMsgr=0&.v=0&.chkP=N&.last=&.done="); > > curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookies.txt"); > curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt"); > > curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; PPC > Mac OS X;en) AppleWebKit/419.2.1 (KHTML, like Gecko) Safari/419.3'); > curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); > > $result=curl_exec ($ch); > curl_close ($ch); > echo $result; > > ------------------------------------ > Hello, > I have done this before but I used header information to control the > cookie without using cURL. > > Some things that don't look right to me - > > curl_setopt ($ch, CURLOPT_URL, 'http://login.yahoo.com/config/login? > <http://login.yahoo.com/config/login?>'); > > Shouldn't the '?' be with the rest of the query string instead here - > "?login=$username&passwd=$password&.src=&...... > > and - > > &.tries=5 > > did you copy this from a browser? will it work manually into a browser? > > and > > &.challenge=ydKtXwwZarNeRMeAufKa56.oJqaO > > Is some sort of session token? Has it expired?
You're right, that is dynamic. I have written a function for scraping what input fields are currently on the page that will work perfectly for this. Here is the script. I actually tested it with my username & password and it let me in just fine: <?php $cookiefile = 'cookies.txt'; $page = PostPage('http://login.yahoo.com/config/login','','',$cookiefile); //retrieve page without loging in. $args = formflds($page); //get all of the input fields $args['login'] = 'login'; // overwrite username $args['passwd'] = 'passwd'; // overwrite password $page = PostPage('http://login.yahoo.com/config/login',$args,'',$cookiefile); // login echo $page; ################################################################### function PostPage($URL, $args = array(), $referer = '', $cookiefile = '') { if ( $args == '' ) $args = array(); if ( count($args) ) { foreach ( $args as $key => $val ) { $postfields .= "$key=" . urlencode($val) . "&"; } $postfields = substr($postfields, 0, -1); } $ch = curl_init($URL); if ( !defined('CURL_NOHEADER') ) curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X;en) AppleWebKit/419.2.1 (KHTML, like Gecko) Safari/419.3'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if ( defined('CURL_TIMEOUT') ) { curl_setopt($ch, CURLOPT_TIMEOUT, CURL_TIMEOUT); } curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_ENCODING, 'fred'); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); if ( $postfields ) curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); if ( $referer ) { curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); } if ( $cookiefile ) { curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); } if (!$webpage = curl_exec($ch)) $webpage = "Error: " . curl_errno($ch) . "\nDescription: " . curl_error($ch); curl_close($ch); return $webpage; } function formflds($page){ preg_match_all("#<input[^>]*>#i",$page,$data); $result = array(); $data = $data[0]; foreach($data as $k => $v){ if(preg_match("#\bname\s*=\s*(['\"])?((?(1).*?|[^\s>]*))(?(1)\\1|[\s>])#is", $v, $name) ) { preg_match("#\bvalue\s*=\s*(['\"])?((?(1).*?|[^\s>]*))(?(1)\\1|[\s>])#is", $v, $value); $result[$name[2]] = $value[2]; } } preg_match_all("#<select[^>]*>.+?</select>#is",$page,$select); $select = $select[0]; foreach($select as $k => $v){ preg_match("#\bname\s*=\s*(['\"])?((?(1).*?|[^\s>]*))(?(1)\\1|[\s>])#is",$v,$name); if(preg_match("#<option[^>]*selected[^>]*>#i",$v,$value)); else $value[0] = $v; preg_match("#\bvalue\s*=\s*(['\"])?((?(1).*?|[^\s>]*))(?(1)\\1|[\s>])#is",$value[0],$value); $result[$name[2]] = $value[2]; } foreach ($result as $k => $v) if(is_null($v)) $result[$k] = ''; return $result; } ?>