Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP, cURL - API Login (Request parameter 'password' is required)

Einklappen

Neue Werbung 2019

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

  • PHP, cURL - API Login (Request parameter 'password' is required)

    Ich versuche, mich an einer API mit folgendem Code anzumelden
    PHP-Code:
    header('Content-type: application/json; charset=utf-8');

    error_reporting(E_ALL);
    ini_set('display_errors''1');

    $id $_POST["id"];
    $id2 $_POST["id2"];

    // URL to fetch
    $url "https://bpk.bs.picturemaxx.com/api/v1/user/login";

    // Setting the HTTP Request Headers
    $User_Agent 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';
    $request_headers[] = 'X-picturemaxx-api-key: Key';
    $request_headers[] = 'Content-Length:0';
    $request_headers[] = 'Expect:  ';
    $request_headers[] = 'Authorization: Bearer token';

    $username "$id";
    $password "$id2";

    $ch curl_init($url);

    // Set the url
    curl_setopt$chCURLOPT_URL$url );
    curl_setopt($chCURLOPT_USERAGENT$User_Agent);
    curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_USERPWD"$username:$password");
    //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_ANY);

    // Execute
    $result curl_exec($ch);

    // Performs the Request, with specified  curl_setopt() options (if any).
    $status_code curl_getinfo($chCURLINFO_HTTP_CODE);

    // Closing
    curl_close($ch); 
    Wenn ich diesen Code ausführe, bekomme ich nur "Request parameter 'password' is required". Ein Beispiel für einen Body zum Anmelden von der API-Website sieht wie folgt aus
    Code:
     {   "password": "string",   "username": "string" }
    und ein Beispiel CURL sieht so aus

    Code:
     curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-picturemaxx-api-key: key' -d '{ \     "password": "pwd", \     "username": "usrname" \   }' 'https://bpk.bs.picturemaxx.com/api/v1/user/login'
    Wie muss ich den Beispielbody, also Benutzername und Passwort (siehe oben), in PHP Curl verwenden damit die Anmeldung funktioniert? Wie kann ich den bei der Anmeldung erstellten Token weiter verwenden?

    Danke für Lösungen

  • #2
    Das hier ist quatsch:
    PHP-Code:
    $username "$id";
    $password "$id2"
    ist das gleiche wie das:
    PHP-Code:
    $username $id;
    $password $id2
    , was das gleiche wie das ist:
    PHP-Code:
    $_POST["id"];
    $_POST["id2"]; 
    Zu Deiner Frage, ich vermute, Name und Passwort sollten per POST-Daten übermittelt werden bei der API.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Hallo,

      ja sollen per POST-Daten übermittelt werden. Ich habe auch schon einige Versuche unternommen aber was ich immer im Endeffekt erhalte ist "Request parameter 'password'.
      Dies habe ich zb schon versucht

      PHP-Code:
      $data = array('username'=>'usrname','password'=>pwd'); 
      und dann
      PHP-Code:
      curl_setopt($chCURLOPT_POSTFIELDSjson_encode($data)); 
      mit dem selben Ergebnis. Vielleicht mache ich einen FEhler bei der Übergabe von Username und Passwort welches nicht zur Body-Vorgabe passt?

      Grüße

      Kommentar


      • #4
        Dann zeig uns doch bitte Deinen Versuch, wie Du das über die Post-Daten probiert hast?
        Die Code-Zeile aus #3 würde einen ganz anderen Fehler melden, daher gehe ich davon aus, das nicht die echte Zeile ist.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          So schaut das aktuell aus

          PHP-Code:
          <?php
                      header
          ('Content-type: application/json; charset=utf-8');
                  
          error_reporting(E_ALL);
                  
          ini_set('display_errors''1');
                      
          $id $_POST["id"];    
                      
          $id2 $_POST["id2"];                
                          
          // URL to fetch
                          
          $url "https://bpk.bs.picturemaxx.com/api/v1/user/login";
                      
          // Setting the HTTP Request Headers
                          
          $User_Agent 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

                          
          $request_headers[] = 'X-picturemaxx-api-key: 192834jefosari2304r';
                          
          $request_headers[] = 'Content-Length:0';
                          
          $request_headers[] = 'Expect:  ';
                          
          $request_headers[] = 'Authorization: Bearer token';

                          
          $data = array('username'=>'usrname','password'=>'pwd');

                        
          $ch curl_init($url);
                        
          // Set the url
                          
          curl_setopt$chCURLOPT_URL$url );
                          
          curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                          
          curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                          
          curl_setopt($chCURLOPT_POSTtrue);
                          
          curl_setopt($chCURLOPT_POSTFIELDSjson_encode($data));
                          
          //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                          
          curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_ANY);


                          
          // Execute
                          
          $result curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                          
          $status_code curl_getinfo($chCURLINFO_HTTP_CODE);
                          
          // Closing
                  
          curl_close($ch);


          ?>

          Kommentar


          • #6
            Lt. Deinem Post #1 steht aber der Username in $id und das Passwort in $id2?! Dann kannst Du doch nicht allen Ernstes annehmen, dass das hier funktioniert:
            PHP-Code:
            array('username'=>'usrname','password'=>'pwd'); 
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Ah entschuldige bitte. Ich habe vergessen das aus dem Code zu löschen. Natürlich steht an der Stelle der richtige Username und Passwort die ich hier aus Sicherheitsgründen nicht angebe.


              PHP-Code:
              <?php
                          header
              ('Content-type: application/json; charset=utf-8');
                      
              error_reporting(E_ALL);
                      
              ini_set('display_errors''1');             
                              
              // URL to fetch
                              
              $url "https://bpk.bs.picturemaxx.com/api/v1/user/login";
                          
              // Setting the HTTP Request Headers
                              
              $User_Agent 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

                              
              $request_headers[] = 'X-picturemaxx-api-key: 192834jefosari2304r';
                              
              $request_headers[] = 'Content-Length:0';
                              
              $request_headers[] = 'Expect:  ';
                              
              $request_headers[] = 'Authorization: Bearer token';

                              
              $data = array('username'=>'usrname','password'=>'pwd');

                            
              $ch curl_init($url);
                            
              // Set the url
                              
              curl_setopt$chCURLOPT_URL$url );
                              
              curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                              
              curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                              
              curl_setopt($chCURLOPT_POSTtrue);
                              
              curl_setopt($chCURLOPT_POSTFIELDSjson_encode($data));
                              
              //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                              
              curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_ANY);


                              
              // Execute
                              
              $result curl_exec($ch); // Performs the Request, with specified curl_setopt() options (if any).
                              
              $status_code curl_getinfo($chCURLINFO_HTTP_CODE);
                              
              // Closing
                      
              curl_close($ch);


              ?>

              Kommentar


              • #8
                Du nutzt https://curl.haxx.se/libcurl/c/CURLOPT_USERPWD.html was wohl nicht geht da es für httpauth. imap pop3 etc angewendet wird.
                Du must halt die Post Felder mitsenden, wenn du Parameter mitsenden willst und zwar als Array aber ohne json_encode

                siehe auch http://php.net/manual/en/function.curl-setopt.php

                Kommentar


                • #9
                  Hallo Protestix,

                  aktuell sieht das bei mir so aus

                  PHP-Code:
                  $data = array('username'=>'usrname','password'=>'pswd');

                                
                  $ch curl_init($url);
                                
                  // Set the url
                                  
                  curl_setopt$chCURLOPT_URL$url );
                                  
                  curl_setopt($chCURLOPT_USERAGENT$User_Agent);
                                  
                  curl_setopt($chCURLOPT_HTTPHEADER$request_headers);
                                  
                  curl_setopt($chCURLOPT_POSTtrue);
                                  
                  curl_setopt($chCURLOPT_POSTFIELDSjson_encode($data));
                                  
                  //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                                  
                  curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_ANY); 
                  aber auch wenn ich curl_setopt($ch, CURLOPT_POSTFIELDS, $data); anwende bleibt es dabei das er nach dem Passwort fragt.

                  Kommentar


                  • #10
                    Schaue dir nicht nur die Links an sondern verstehe auch was dort steht.
                    Warum json_encode($data)); ?

                    Kommentar


                    • #11
                      CURLOPT_POSTFIELDS wird doch als String übergeben, oder irre ich?
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        protestix den Tip mit json_encode($data)); hab ich auf einer anderen Plattform erhalten, da die Seite als Content Type JSON verwendet, welcher ja leider nicht funktioniert hat.

                        Arne Drews ja wird als String übergeben.

                        Hat es evtl etwas damit zu tun wie man Nutzername und Passwort übergibt? Dies sind ja die Vorgaben von Picturemaxx
                        Code:
                         {   "password": "string",   "username": "string" }
                        und
                        Code:
                          
                         curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-picturemaxx-api-key: key' -d '{ \     "password": "pwd", \     "username": "usrname" \   }' 'https://bpk.bs.picturemaxx.com/api/v1/user/login'
                        Wie müsste die Schreibweise bspw hinter postfields aussehen?

                        Kommentar


                        • #13
                          This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array
                          Quelle:http://php.net/manual/en/function.curl-setopt.php

                          Kommentar


                          • #14
                            Und das müsste dann so aussehen?

                            curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=usrname&password=pwd');

                            gerade probiert. Funzt leider auch nicht

                            Kommentar


                            • #15
                              Kann ich nicht genau sagen, aber probier mal die dann auch wirklich als String zu übergeben:
                              PHP-Code:
                              $data 'username=usr&password=pwd';
                              ...
                              curl_setopt$chCURLOPT_POSTFIELDS$data ); 
                              Achso, protestixs Beitrag zu spät gesehen... Dann sollte Array auch gehen.
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X