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

URL dieses Beitrags: http://blog.stefan-macke.com/2008/01/26/mit-php-werte-per-post-an-eine-website-uebergeben-zb-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
Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Einen Kommentar schreiben

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>