Ich arbeite an einem Projekt für einen Kunden, der ein automatisches Login nach einem Link-Klick benötigt.
Ich verwende dazu eine Handshake-Seite mit dem folgenden Code:
$username = "admin";
$password = "blog";
$url = "http://wordpressblogURL/";
$cookie = "cookie.txt";
$postdata = "log=" . $username . "&pwd=" . $password . "&wp-submit=Log%20In&redirect_to=" . $url . "blog/wordpress/wp-admin/&testcookie=1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url . "blog/wordpress/wp-login.php");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt ($ch, CURLOPT_REFERER, $url . "blog/wordpress/wp-login.php");
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
echo $result;
exit;
Das funktioniert gut. Es meldet mich großartig an.
Das Problem ist, dass ich glaube, dass WordPress die URL als Schlüssel verwendet.
Zur Erläuterung: Meine Handshake-Seite (mit der ich mich anmelde) befindet sich im Verzeichnis "blog" und meine WordPress-Anwendung im Verzeichnis "wordpress", das sich innerhalb des Verzeichnisses "blog" befindet. Die URL im Browser lautet ..blog/handshake.php
. Es hat jedoch den Admin-Bereich von WordPress im Browserfenster. WordPress-Admin-Links funktionieren jetzt nicht mehr richtig, weil die URL im ../blog
Verzeichnis, wenn es im Verzeichnis ..blog/wordpress/wp-admin
Verzeichnis.
Gibt es eine Möglichkeit, in cURL damit die URL im Browser der tatsächlichen Seite entspricht?
Sollte ich stattdessen FSockOPen verwenden?