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:

  1. // die Foren werden über eine einheitliche URL aufgerufen,
  2. // die lediglich den Parameter ID bekommt
  3. $url = "http://adresse.des.forums/forum.php?id=";
  4. // die Foren sollen als HTML-Datei abgelegt werden,
  5. // um später geparst zu werden
  6. $ids = array(
  7.          "123" => "Forum123.htm",
  8.          "234" => "NochEinForum.htm"
  9. );
  10. $curl = curl_init();
  11. curl_setopt($curl, CURLOPT_HEADER, 0);
  12. curl_setopt($curl, CURLOPT_POST, true);
  13. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  14. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  15. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  16. // diese Datei wird zum Speichern des Cookies verwendet
  17. curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile");
  18. curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile");
  19. // der Aufruf der Login-Seite
  20. curl_setopt($curl, CURLOPT_URL, "http://adresse.des.forums/login.php");
  21. // hier müssen die Benutzerdaten eingetragen werden
  22. curl_setopt($curl, CURLOPT_POSTFIELDS, "login=Benutzername&passwort=geheim");
  23. $xxx = curl_exec($curl);
  24. foreach ($ids as $id=>$name)
  25. {
  26.         echo "Hole " . $name . "…\n";
  27.         // hier wird die URL des Forums zusammengesetzt
  28.         curl_setopt($curl, CURLOPT_URL, $url . $id);
  29.         $xxx = curl_exec($curl);
  30.         file_put_contents("/pfad/zum/script/" . $name, utf8_encode($xxx));
  31. }
  32. 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 uns 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