Mit PHP Werte per POST an eine Website übergeben (z.B. Benutzerlogin)

Heute hatte ich den Wunsch, die Inhalte eines kleinen Forums als RSS-Feed anzubieten. Die Umwandlung der Daten in RSS ging mittels Regular Expressions recht einfach, jedoch liegen die Seiten des Forums hinter einer Login-Seite, die Benutzernamen und Passwort in einem HTML-Formular abfragt. Danach wird ein Cookie gesetzt und die Forumsseiten sind zugänglich. Wie kann ich diesen Login-Vorgang nun mit PHP in einem Script durchführen, dass dann per Cronjob automatisch aufgerufen wird?

Eigentlich recht einfach mittels curl. Zunächst gilt es, die Packages zu installieren:

apt-get install curl php5-curl

Danach sollte das folgende Script laufen und die Forenseiten jeweils als HTML-Datei abspeichern:

// die Foren werden über eine einheitliche URL aufgerufen, // die lediglich den Parameter ID bekommt $url = "http://adresse.des.forums/forum.php?id="; // die Foren sollen als HTML-Datei abgelegt werden, // um später geparst zu werden $ids = array( "123" => "Forum123.htm", "234" => "NochEinForum.htm" ); $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // diese Datei wird zum Speichern des Cookies verwendet curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile"); curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile"); // der Aufruf der Login-Seite curl_setopt($curl, CURLOPT_URL, "http://adresse.des.forums/login.php"); // hier müssen die Benutzerdaten eingetragen werden curl_setopt($curl, CURLOPT_POSTFIELDS, "login=Benutzername&passwort=geheim"); $xxx = curl_exec($curl); foreach ($ids as $id=>$name) { echo "Hole " . $name . "...\n"; // hier wird die URL des Forums zusammengesetzt curl_setopt($curl, CURLOPT_URL, $url . $id); $xxx = curl_exec($curl); file_put_contents("/pfad/zum/script/" . $name, utf8_encode($xxx)); } curl_close ($curl);

Nun noch den ganzen Kram in die /etc/crontab eingetragen und es kann losgehen (jede dritte Stunde werden die Seiten geladen):

0  */3    * * *   root    /pfad/zum/script/getPages.php

Über Stefan

Polyglot Clean Code Developer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax