[PHP] Login auf Website mit cURL und Download

  • Servus,

    stehe im Moment vor einem nicht ganz einfachen Problem bzgl. cURL und Download.

    Ich verwalte eine recht große Website, die mehrere XML-Dateien verarbeitet, die auf einem anderen Server liegen. Dies war auch bisher nie ein Problem, doch seit kurzem sind diese XML-Daten nur noch nach einem Login downloadbar. Folglich funktioniert das Script nicht mehr wie bisher.

    Da ich die Zugangsdaten natürlich besitze, dachte ich mir, das Script um einen automatischen Login auf der Seite per cURL zu erweitern, um danach wie gewohnt die XML-Dateien herunterzuladen.

    Doch irgendwie scheint der Login nicht zu funktionieren, oder die eingeloggte Session bleibt nicht lang genug erhalten. Ich kann nicht genau sagen wo das Problem liegt, da cURL keine Fehlermeldungen ausgibt.
    Ich sehe nur, dass sich trotz vermeidlich eingeloggtem Script die XML-Dateien nicht downloaden lassen. Ich hab bisher noch keine Erfahrung mit cURL, nehme also an, dass ich irgendwas falsch mache ;)

    Hier ist der relevante Teil meines Scripts:

    Kürze Erläuterung:
    Script loggt sich auf der Seite ein.
    Anschließend folgt der alte Teil des Scripts, der URLs aus einer Datenbank ausliest, und dann per copy() versucht die XML-Daten vom Server zu holen (was fehlschlägt).
    (Die Logindaten und die Website wo ich mich einlogge habe ich natürlich hier zensiert)

    Wo liegt mein Denkfehler, bzw. Problem?


    Danke,
    Lizzard

    Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.

  • Das Ergebnis von curl_exec liefert ja auch nur das Login-Formular zurück, es geht ja nur darum, dass mein Script "eingeloggt" ist, um die nachfolgenden Aktionen ausführen zu können.

    Und so lange ich mit cURL "eingeloggt" bin (bis ich $ch schließe) müsste ich doch entsprechende Aktionen auf die geschützten URLs durchführen können, oder?

    Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.

  • Wenn du eingeloggt bist, brauchst du eigentlich nur noch die URL der XML Dateien anzusurfen und dann bekommst du über

    Code
    [COLOR=#000000][COLOR=#0000BB]$store [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]curl_exec [/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$ch[/COLOR][COLOR=#007700]);

    den Inhalt der XML Datei ;)
    [/COLOR][/COLOR]

    Gruß crAzywuLf :D

  • jep, wär mir neu, dass curl quasi ne gefakte php-shell ist :)
    machs wie crazywulf sagt:
    curl mit den logindaten abfeuern, cookie speichern, cookie setzen, und dann wieder per curl die xml holen.


  • Kann es sein, dass ich den Cookie nicht richtig speichere/setze/benutze? Weil ich in meine XML-Dateien statt den XML-Daten jetzt immer nur eine Error-Seite reinbekomme mit "Ich bin nicht eingeloggt".

    Code sieht jetzt so aus:

    Ich glaube ich bin noch nicht so durch das ganze cURL-Konzept durchgestiegen...


    Grüße,

    Lizzard

    Sometimes you have a programming problem and it seems like the best solution is to use regular expressions; now you have two problems.

    Einmal editiert, zuletzt von Lizzard (8. Dezember 2009 um 00:09)

  • in deinem Code sehe ich jetzt keine Fehler.
    Überprüfe mal genauer deine cookie-datei auf Existenz (du musst sie per hand anlegen, sie wird nicht automatisch erstellt) und Schreibrechte.

    Edit: Da ist doch ein kleines Fehlerchen ;)
    setze mal für die curls, welche dann die xml-daten holen, noch

    PHP
    curl_setopt($ch, CURLOPT_COOKIEFILE, "so_wie_COOKIEJAR");


    Mit Cookiejar kannst du nur in den Cookie schreiben, du willst aber, dass der Cookie für die Session auf der externen Seite genutzt wird.
    Das sollte es eigentlich sein, zusammen mit oben geschriebenem.


    Einmal editiert, zuletzt von jojo87 (8. Dezember 2009 um 18:14)