Ankündigung

Einklappen
Keine Ankündigung bisher.

cURL Session-Cookie

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • cURL Session-Cookie

    Hallo zusammen,

    mein Ziel ist es, mich zunächst über cURL auf einer externen URL zu autentifizieren, die Session soll dann erhalten bleiben, damit eine weiterer Request ausgeführt werden kann.
    Die Autentifizierung im ersten Request, wird mit meinem Code unten erfolgreich durchgeführt, der zweite Request liefter ein 'false' bzw. 401-Unauthorized zurück. Ich vermute mal,
    es liegt daran, dass das Session Cookie nicht gesetzt wird. Die cookies.txt ist immer leer. Kann mir Jemand sagen was ich falsch mache?

    Ich freue und bedanke mich für eure Hilfe!!

    Code:
    <?php
    
    require_once 'AbstCtrlBase.php';
    /*
    *@author longJSilver
    */
    
    class LoginRequest extends AbstCtrlBase {
    
        private $datas;
    
        public function __construct($datas) {
            $this->datas = json_decode($datas, true);
        }
    
        public function getLoginAction() {
    
            $cookieFile = "cookies.txt";
            if (!file_exists($cookieFile)) {
                $fh = fopen($cookieFile, "w");
                fwrite($fh, "");
                fclose($fh);
            }
            $url = "http://example.de/";
            $ch = curl_init();
    
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_USERPWD, "xxxxxx:xxxxxx");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_FAILONERROR, 1);
            curl_exec($ch);
    
            if (curl_error($ch)) {
                echo 'false';
            } else {
                curl_close($ch);
                unset($ch);
                $email = urlencode($this->datas['auth_mail']);
                $passw = urlencode($this->datas['auth_pw']);
    
                $url = "http://example.de/?xxx=xxx";
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
                curl_setopt($ch, CURLOPT_COOKIE, $cookieFile);
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, "auth_mail=$email&auth_pw=$passw");
                curl_setopt($ch, CURLOPT_HEADER, 0);
                curl_setopt($ch, CURLINFO_HEADER_OUT, 0);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_FAILONERROR, 1);
                $response = curl_exec($ch);
    
                if (curl_error($ch)) {
                    echo 'false';
                } else {
                    echo json_encode($response);
                }
            }
        }
    
    }


  • #2
    Das curl_close() brauchst du nur einmal ganz am Ende aufrufen und das curl_init() einmal ganz am Anfang.
    Beim zweiten Request brauchst du dann eigentlich nur noch die Sachen angeben die vom 1. Request abweichen, also:

    PHP-Code:
      curl_setopt($chCURLOPT_URL$url);
      
    curl_setopt ($chCURLOPT_POSTFIELDS'auth_mail=$email&auth_pw=$passw');

      
    $response curl_exec($ch); 
    Und das Cookie File erst leer anzulegen oben benötigt man eigentlich auch nicht.

    Kommentar


    • #3
      Ja das passt jetzt so! Danke Dir!!

      Und das Cookie File erst leer anzulegen oben benötigt man eigentlich auch nicht.
      Heißt das dieses Cookiefile wird durch den cURL Aufruf temporär erzeugt und nach dem curl_close wieder gelöscht?

      Kommentar

      Lädt...
      X