2013-06-01 4 views
6

Ich habe den folgenden PHP-Code, der sich auf einer passwortgeschützten Seite anmeldet und die geschützte Seite ergreift. Das Skript funktioniert gut, aber ich möchte die Login-Funktion nur einmal verwenden, wenn ich eine andere geschützte Seite innerhalb der gleichen Domain erfassen möchte.Wie php curl response cookie wiederverwenden und Login-Schritte bei den folgenden Ausführungen des Skripts umgehen?

Ich möchte die Cookie-Datei verwenden, um die nächste geschützte Seite zu öffnen, anstatt die Login-Funktion erneut zu verwenden! In einem anderen Wort möchte ich nur den Login-Schritt zum Ergreifen anderer geschützter Seiten umgehen.

Kann mir jemand zeigen, wie das geht?

Hinweis: Meine Login-Funktion erstellt keine Cookies, ich sehe sie nicht im selben Ordner wie das Skript! Kann mir jemand sagen, warum?

<? 

     $ch=login(); 
    $html=downloadUrl('http://www.example.com/page1.asp', $ch); 

    ////echo $html; 


    function downloadUrl($Url, $ch){ 
     curl_setopt($ch, CURLOPT_URL, $Url); 
     curl_setopt($ch, CURLOPT_POST, 0); 
     curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/"); 
     curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0"); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
     $output = curl_exec($ch); 
     return $output; 
    } 



    function login() 
    { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.asp'); //login URL 
     curl_setopt ($ch, CURLOPT_POST, 1); 
     $post_array = array( 
     'txtUserName'=>'brad', 
     'txtPassword'=>'bradpassword', 
     ); 
     curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_array); 
     curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
     $store = curl_exec ($ch); 
     return $ch; 
    } 
?> 
<html> 


<br> 
<textarea rows="30" cols="150"><?PHP print_r($html); ?></textarea> 
</html> 
+0

Also was zeigt 'cookie.txt'? –

+0

Danke für answers.cookie.txt wird nicht im selben Ordner wie das PHP-Skript erstellt! Ich habe es selbst erstellt, aber nichts wurde darauf geschrieben! Wenn ich mich manuell auf der Remote-Site anmelde, werde ich mich auch nach vielen Tagen nicht mehr nach dem Passwort fragen! Ich möchte dasselbe erreichen, während ich dieses PHP-Skript mehrmals ausführe! denn wenn ich meinen aktuellen PHP-Code ausführe, bekomme ich die geschützten Seiten nicht, da mir die Website meine Religion so schnell verweigert! – user1788736

+0

Haben Sie das gesehen? http://stackoverflow.com/questions/895786/how-to-get-the-cookies-from-a-php-curl-into-a-variable –

Antwort

2

Verwenden

curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFileLocation); 
curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFileLocation); 

Auf dem zweiten Anfrage, wo $ cookieFileLocation die Lage Ihrer Cookie-Datei ist.

Sie müssen 2 Anfragen haben. Zuerst ist eine Login-Anfrage, die die Cookie-Datei füllt.

Sie müssen überprüfen, ob Ihre Cookie-Datei existiert is_file($cookieFileLocation), und wenn dies der Fall ist, können Sie eine zweite Anfrage für Download-geschützten Inhalt unter Umgehung der Login-Prozess durchführen.

Sie sollten beachten, dass die meisten Systeme Session-Ablaufzeit haben, so dass Sie nach Ablauf der Zeit anmelden müssen. Ich würde html der zurückgegebenen Seite für Login-Fehler überprüfen, als Zeichen, dass ich mich erneut anmelden muss.

+0

bksi Wie soll ich beim Bigining jedes Aufrufs nach dem Cookie suchen und wenn der Cookie vorhanden ist, umgehen Sie die Anmeldung und verwenden Sie diesen Cookie, um geschützte Seiten zu erhalten? Problem ist, dass die cookie.txt nie erstellt wird, weiß nicht warum! – user1788736

+2

Sie sollten absoluten Pfad verwenden, um Cookie-Datei – bksi

+0

CURLOPT_COOKIEFILE zeigt zu curl, um diese Cookie-Anmeldeinformationen von Ziel-Cookie-Datei – bksi

2

Sie müssen sich beim ersten Mal anmelden und dann den Cookie-Dateipfad in der nachfolgenden Anfrage referenzieren.

function curlPost($url,$postData){ 
    $ch= curl_init(); 
    curl_setopt_array($ch, array(
     CURLOPT_URL => $url, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_POST => true, 
     CURLOPT_POSTFIELDS => $postData, 
     CURLOPT_FOLLOWLOCATION => true, 
     CURLOPT_CONNECTTIMEOUT=>30, 
     CURLOPT_SSL_VERIFYPEER=>false, 
     CURLOPT_USERAGENT=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", 
     CURLOPT_COOKIESESSION => true, 
     CURLOPT_COOKIEFILE => 'cookie.txt', 
     CURLOPT_COOKIEJAR => 'cookie.txt' 
    )); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return $output; 
} 

$postData = array(
    'email' => '[email protected]', 
    'password' => 'aryan022', 
    'redirect_to' => 'http://localhost/cakephp/account ' 
); 

$output=curlPost("http://localhost/cakephp/login",$postData); 

    /*use for subsequest request without passing all postData once login 
    $postData = array(); 
    $output=curlPost("http://localhost/cakephp/account",$postData); 
*/ 
echo $output; 
Verwandte Themen