2016-07-20 10 views
2

Ich habe ein PHP-Skript, das CURL verwendet, um sich mit einer einfachen Anmeldeseite in einer Site anzumelden. Es sendet eine erste Anfrage an die Website und sieht, ob es bereits eingeloggt ist (aufgrund von Cookies) oder ob die Login-Seite kommt - und wenn ja, loggt sich ein.PHP CURL speichert Cookie in cookiejar, verwendet es aber nicht

Allerdings habe ich das vor kurzem jedes Mal das Skript bemerkt läuft es ist nie angemeldet. Tief Tauchen in die Header mit VERBOSE zeigt, dass das Cookie in der COOKIEFILE/COOKIEJAR nie verwendet wird, nur die Cookies, die von der Website für diese bestimmte Sitzung empfangen werden. Wenn ich in der Mitte des Laufs manuell Cookies hinzufüge (etwas, das früher funktionierte), funktioniert es nicht mehr, da die Cookies im COOKIEFILE nicht wirklich verwendet werden.

Dies geschieht sowohl lokal als auch auf dem Produktionsserver, was bedeutet, dass es sich nicht um ein Systemproblem handelt. Ich habe Testversionen für andere Login-Seiten mit den gleichen Ergebnissen erstellt. Ich verwende einen vollständigen Pfad zur Cookie-Datei (die mit Cookies aktualisiert wird, nur nicht verwendet) und verwenden Sie curl_close().

Im Anschluss an die ROTATION-Funktion:.

private function curlPage($url, $postParameters) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_POST, TRUE); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postParameters); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__.'/cookie.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__.'/cookie.txt'); 
    curl_setopt($ch, CURLOPT_ENCODING, ''); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_POSTREDIR, 3); 
    if ($this->verbose == 1) curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
    curl_setopt($ch, CURLOPT_TIMEOUT, $this->defaultTimeout); 
    curl_setopt($ch, CURLOPT_USERAGENT, $this->useragent); 
    $pageResponse = curl_exec($ch); 
    curl_close($ch); 
    return $pageResponse; 
} 

Es folgt die ausführliche Antwort des CURL Anfrage auf die Hauptseite, wo es soll, ob oder nicht überprüfen, es angemeldet ist als Standort ist ein Kunde, ich habe es redigiert.

* Rebuilt URL to: ********* 
* Hostname was NOT found in DNS cache 
* Trying : *********... 
* Connected to : ********* (*********) port 80 (#0) 
> GET/HTTP/1.1 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/8.0.6 Safari/600.6.3 
Host: ********* 
Accept: */* 

< HTTP/1.1 200 OK 
< Date: Wed, 20 Jul 2016 20:42:22 GMT 
< Content-Type: text/html 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< Keep-Alive: timeout=15 
< Vary: Accept-Encoding 
< Expires: Mon, 26 Jul 1980 00:00:00 GMT 
< Pragma: no-cache 
< Cache-Control: no-cache, no-store, must-revalidate 
* Server ********* is not blacklisted 
< Server: ********* 
< 

Wie zu sehen ist - kein Cookie in Sicht, obwohl ein COOKIEFILE vorhanden ist.

Jede Hilfe wäre sehr geschätzt.

Antwort

3

Zuerst müssen Sie sicherstellen, __DIR__ haben Schreibberechtigung.

Die zweite, wenn Sie Code ausführen. Sie können überprüfen, cookie.txt10 Datei erstellt wurde oder nicht.

Der dritte Sie müssen ein Cookie für alle Sitzung verwenden. So weiß das Opfer, musst du angemeldet.

Und versuchen, meine Quelle

$cookies = tempnam('/tmp','cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); 
+0

Cookie-Dateien löschen und läuft das Skript erneut in Folge Cookie-Dateien erzeugt werden. – Idan

+0

@Idan Und es hat funktioniert? oder nicht? –

+0

Interessanterweise scheint es ein Berechtigungsproblem zu sein. Speichern in einem anderen Verzeichnis scheint den Trick zu machen. Danke für den Tipp! Weißt du, was Chmod das Cookie-Verzeichnis haben sollte? Vielen Dank! – Idan

Verwandte Themen