Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit Curl einloggen

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mit Curl einloggen

    Also ich möchte Daten von einer Seite abrufen. Allerdings ist diese Seite mittels "HTTP Authorization" geschützt. Mit folgendem Code logge ich mich dort ein:

    PHP-Code:
    $url "link.php";
    $username "Name";
    $password "Passwort";
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_USERPWD"$username:$password");
    curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
    $output curl_exec($ch);
    $info curl_getinfo($ch);
    curl_close($ch); 
    Das klappt auch soweit. wenn ich "echo $output" eingebe, wird die Seite angezeigt.
    Allerdings gibt es jetzt noch ein Problem. Und zwar muss man sich auf dieser Seite nochmals einloggen diesmal über ein Formular, dass mittels PHP und der POST-Methode funktioniert. Wie kann ich diese Daten jetzt zusätzlich übermitteln um auf die gewünschte Seite zuzugreifen?

    Der Code für den zweiten Login funktioniert alleine auf anderen Seiten auch, allerdings nicht in Verbindung mit dem doppelten Login:

    PHP-Code:
    $ch curl_init();

    $url ="seite.php?login=x";
    $arrSubmit="login_setcookie=1&remove_path=&user=xxx&userpw=xxx";

    curl_setopt($chCURLOPT_URL,$url);
    curl_setopt ($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS$arrSubmit);
    curl_setopt($chCURLOPT_HEADER0);


    curl_exec($ch);

    $temp "seite.html";
    $page file_get_contents($temp,'r');

    $mystring "string";
    $poser strpos($page$mystring);
    if (
    $poser === false)
       {
       echo 
    "nicht gefunden";
       }
    else
       {
       echo 
    "gefunden";
       } 
    Ich habe also ein Problem die beiden zu verbinden... Hoffe mir kann jemand helfen, vielen dank schonmal


  • #2
    Zitat von secretwz Beitrag anzeigen
    Ich habe also ein Problem die beiden zu verbinden...
    Dann beschreibe, was du diesbezüglich versucht hast, und welche Probleme dabei auftreten.

    Kommentar


    • #3
      1.Versuch:
      Habe ich den zweiten Teil in den ersten reingeschrieben. Dabei natürlich einmal curl_init($ch) und curl_close($ch) weggelassen.

      2.Versuch:
      Genauso wie 1., nur habe ich die beiden Teile unterschiedlich benannt, den zweiten Teil mit der Variable $ch2, und diese natürlich innerhalb der anderen geöffnet und geschlossen

      3.Versuch:
      Es genauso nacheinander geschrieben, ohne zu verschachteln, einmal mit nur $ch und einmal mit $ch und $ch2

      Egal bei welcher Variante es tritt immer der gleiche Fehler auf:

      Code:
      Authorization Required
      
      This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
      Apache/2.2.9 (Debian) mod_ssl/2.2.9 OpenSSL/0.9.8g Server at seite.de Port 80
      
      Warning: file_get_contents(seite.html) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in /users/.../datei.php on line 33
      nicht gefunden
      line 33 ist folgende

      PHP-Code:
      $page file_get_contents($temp,'r'); 
      Irgendwie ist also die Seite beim zweiten Login wieder gesperrt...

      Kommentar


      • #4
        Zitat von secretwz Beitrag anzeigen
        Irgendwie ist also die Seite beim zweiten Login wieder gesperrt...
        HTTP Authentification ist kein „Login“.
        Die Zugangsdaten müssen bei jedem Request erneut mitgeschickt werden.



        Und zu deinen Versuchen - ich meinte natürlich, zeig uns Code, und keine Prosa.

        Kommentar


        • #5
          Gut danke

          1.Versuch:

          PHP-Code:
          <?php
          $url 
          "seite.php";
          $username "user";
          $password "pw";
          $ch curl_init();
          curl_setopt($chCURLOPT_URL$url);
          curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
          curl_setopt($chCURLOPT_USERPWD"$username:$password");
          curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
          $output curl_exec($ch);
          $info curl_getinfo($ch);

          $ch2 curl_init();

          $url2 ="seite.php?login=x";
          $arrSubmit="login_setcookie=1&remove_path=&user=xxx&userpw=xxx";

          curl_setopt($ch2CURLOPT_URL,$url2);
          curl_setopt ($ch2CURLOPT_POST1);
          curl_setopt($ch2CURLOPT_POSTFIELDS$arrSubmit);
          curl_setopt($ch2CURLOPT_HEADER0);

          $out curl_exec($ch2);
          $temp "seite.php";
          $page file_get_contents($temp,'r');

          $mystring "xy";
          $poser strpos($page$mystring);
          if (
          $poser === false)
             {
             echo 
          "gefunden";
             }
          else
             {
             echo 
          "nicht gefunden";
             }

          curl_close($ch2);
          curl_close($ch);
          ?>
          2. versuch:

          PHP-Code:
          <?php
          $url 
          "seite.php";
          $username "user";
          $password "pw";
          $ch curl_init();
          curl_setopt($chCURLOPT_URL$url);
          curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
          curl_setopt($chCURLOPT_USERPWD"$username:$password");
          curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
          $output curl_exec($ch);
          $info curl_getinfo($ch);

          $url2 ="seite.php?login=x";
          $arrSubmit="login_setcookie=1&remove_path=&user=xxx&userpw=xxx";

          curl_setopt($chCURLOPT_URL,$url2);
          curl_setopt ($chCURLOPT_POST1);
          curl_setopt($chCURLOPT_POSTFIELDS$arrSubmit);
          curl_setopt($chCURLOPT_HEADER0);

          $out curl_exec($ch);
          $temp "seite.php";
          $page file_get_contents($temp,'r');

          $mystring "xy";
          $poser strpos($page$mystring);
          if (
          $poser === false)
             {
             echo 
          "gefunden";
             }
          else
             {
             echo 
          "nicht gefunden";
             }

          curl_close($ch);
          ?>
          Ja und der 3.Versuch ist halt im ersten Post enthalten

          Kommentar


          • #6
            Wie ich schon sagte:
            Zitat von ChrisB Beitrag anzeigen
            HTTP Authentification ist kein „Login“.
            Die Zugangsdaten müssen bei jedem Request erneut mitgeschickt werden.

            Du machst aber jedes Mal zwei voneinander unabhängige Requests nacheinander, also kein Wunder, dass das so nicht funktioniert.

            Kommentar


            • #7
              Und wie füge ich die dann zu einem zusammen? So funktioniert es ja auch nicht:

              PHP-Code:
              <?php
              $username 
              "name";
              $password "passwort";
              $url ="seite.php?login=1";
              $arrSubmit="login_setcookie=1&remove_path=&user=xxx&userpw=xxx";
              $ch curl_init();
              curl_setopt($chCURLOPT_URL$url);
              curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
              curl_setopt($chCURLOPT_USERPWD"$username:$password");
              curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
              curl_setopt($chCURLOPT_POST1);
              curl_setopt($chCURLOPT_POSTFIELDS$arrSubmit);
              curl_setopt($chCURLOPT_HEADER0);
              $output curl_exec($ch);
              $info curl_getinfo($ch);

              $temp "seite.php";
              $page file_get_contents($temp,'r');

              $mystring "Nutzt";
              $poser strpos($page$mystring);
              if (
              $poser === false)
                 {
                 echo 
              "nicht gefunden";
                 }
              else
                 {
                 echo 
              "gefunden";
                 }
              curl_close($ch);
              ?>

              Kommentar


              • #8
                Zitat von secretwz Beitrag anzeigen
                Und wie füge ich die dann zu einem zusammen? So funktioniert es ja auch nicht:
                Abgesehen davon, dass „funzt nich“ immer noch keine brauchbare Problembeschreibung ist - ich sehe in deinem Code nirgends, dass du mit dem Ergebnis des per cURL gemachten Request überhaupt irgendwo was sinnvolles anstellst.

                Kommentar


                • #9
                  Naja ich lese Daten von der Seite aus, um sie weiter zu verarbeiten. Wenn ein bestimmter String auf der Seite vorhanden ist, soll etwas bestimmtes ausgegeben werden.
                  Hast du denn einen Vorschlag wie ich mein Problem lösen könnte?

                  Kommentar


                  • #10
                    Zitat von secretwz Beitrag anzeigen
                    Naja ich lese Daten von der Seite aus, um sie weiter zu verarbeiten.
                    Und wo in deinem Code soll diese Weiterverarbeitung angeblich stattfinden?
                    Bisher ist nicht zu erkennen, dass du das Ergebnis des Requests überhaupt in Empfang nimmst.

                    Und was willst du eigentlich mit dem file_get_contents?

                    Hast du denn einen Vorschlag wie ich mein Problem lösen könnte?
                    Vermutlich solltest du dich erst mal informieren, wie man mit dem Ergebnis des Requests, das cURL liefert, überhaupt umgeht. Es sieht aktuell nicht so aus, als ob du darüber ansatzweise Bescheid wüsstest.

                    Kommentar


                    • #11
                      Naja mit dem file_get_contents() lese ich ja gerade de Daten aus. Und wenn der String $mystring auf der Seite steht bei der ich mich eingeloggt habe, wird "gefunden" oder eben "nicht gefunden" ausgegeben. Natürlich ist das so nur ein Beispiel, und das will ich noch erweitern, das ist hier aber nicht wichtig denke ich.

                      Folgender Code funktioniert aber hervorragend: (Habe ich mit einer Seite getestet wo nur das anmelden über POST benötigt wird)

                      PHP-Code:
                      <?php
                      $ch 
                      curl_init();
                      $url ="seite.php?login=1";
                      $arrSubmit="login_setcookie=1&remove_path=&user=xxx&userpw=xxx";
                      curl_setopt($chCURLOPT_URL,$url);
                      curl_setopt ($chCURLOPT_POST1);
                      curl_setopt($chCURLOPT_POSTFIELDS$arrSubmit);
                      curl_setopt($chCURLOPT_HEADER0);
                      curl_exec($ch);
                      $temp "seite.php?path=start";
                      $page file_get_contents($temp,'r');
                      $mystring "string";
                      $poser strpos($page$mystring);
                      if (
                      $poser === false)
                         {
                         echo 
                      "nicht gefunden";
                         }
                      else
                         {
                         echo 
                      "gefunden";
                         }
                      curl_close($ch);
                      ?>
                      Und in dieser Art möchte ich das auch machen. Problem ist bei mir ja nur dass ich ja noch eingeloggt sein muss um auf die gewünschte Seite zu gelangen...

                      Kommentar


                      • #12
                        Zitat von secretwz Beitrag anzeigen
                        Naja mit dem file_get_contents() lese ich ja gerade de Daten aus.
                        Nein, das ist Einbildung.

                        Abgesehen davon, dass du damit auf eine lokale Datei zugreifst (zumindest, wenn der Pfad wirklich so ist wie angegeben), arbeitest du damit schlicht und einfach „an cURL vorbei“.

                        Folgender Code funktioniert aber hervorragend: (Habe ich mit einer Seite getestet wo nur das anmelden über POST benötigt wird)
                        Noch mal - Einbildung.

                        Mit
                        PHP-Code:
                        $temp "seite.php?path=start";
                        $page file_get_contents($temp,'r'); 
                        würdest du höchstens den PHP-Code aus der lokalen Datei auslesen - und die würde dabei noch nicht mal ausgeführt!

                        Wobei du vermutlich einen falschen Pfad genannt hast, denn eine Datei mit dem Namen "seite.php?path=start" wird es im lokalen Dateisystem vermutlich auch nicht geben.
                        Wenn du hier Hilfe bekommen willst - dann unterlasse es bitte, den Code derart zu verfälschen, dass für uns beim Lesen gar nicht mehr erkennbar ist, was du wirklich machst!


                        Sorry, aber dir scheint nicht mal ansatzweise klar zu sein, was du da tust.
                        Informiere dich erst mal generell, wie das Zusammenspiel zwischen Client und Server über HTTP funktioniert.
                        Und dann, wie man mit cURL umgeht - und zwar so, dass man auch wirklich den Request verarbeitet, den man damit geschickt hat, und nicht irgendetwas ganz anderes, das über file_get_contents eingelesen wird.

                        Kommentar


                        • #13
                          1) mit curl auf http request und post einloggen - Forum: phpforum.de

                          2) Weiß der Betreiber der anderen Seite eigentlich von Deinem Tun?

                          Und wenn ja: Warum habt Ihr Euch nicht einfach auf ne Schnittstelle geeinigt, die sich auch sauber automatisiert ansteuern lässt? Die Aktion mit den zwei Logins hier ist doch eigentlich nur Fehleranfällig ohne Ende. Das wird doch im laufenden Betrieb nur zur Dauerbaustelle.

                          Gruß Jens

                          Kommentar


                          • #14
                            Ja das mit dem Crossposting hat sich ja jetzt geklärt..
                            naja wenn das so kompliziert ist, ist es sowieso nicht so wichtig^^ Aber mich würde das Thema ansich interessieren.
                            Könnt ihr mir denn Seiten empfehlen die mit curl, http<>server zu tun haben, und wo ich mich ein wenig belesen könnte?

                            Kommentar


                            • #15
                              Ja das mit dem Crossposting hat sich ja jetzt geklärt..
                              Hat es das? Sorry, von Deiner Seite lese ich hier keinen Hinweis darauf.

                              Bitte beachten: Anmerkungen zu Crosspostings

                              [MOD: Thread geschlossen]
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X