Ankündigung

Einklappen
Keine Ankündigung bisher.

REST API - POST ist leer, wenn man mit Postman postet

Einklappen

Neue Werbung 2019

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

  • REST API - POST ist leer, wenn man mit Postman postet

    Hallo,

    ich habe mit einer fertigen REST API experimentiert und dabei stellte sich heraus, wenn ich mit einem POSTMAN - Tool auf einen PHP-WebServer etwas poste, ist das POST-Array grundsätzlich leer.

    Beispiel, man nehme ein simples FORMULAR mit einem Feld und einen Button und man verwendet die Methode POST und lässt die URL leer, dann sendet man das Formular ab und via VAR_DUMP($_POST) erhält man dann auch genau den Wert, den man vor dem Senden in das Feld geschrieben hat...

    Aber wenn man genau diese PHP-Datei nicht im Browser aufruft um das Formular zu befüllen, sondern man ruft die PHP-Datei nun über ein POST-TOOL auf und schickt dem einen BODY mit, dann ist das Ergebnis von VAR_DUMP($_POST) leer.

    <?php

    var_dump($_POST);

    ?>

    Woran kann das liegen, dass keine Posts auf dem Server ankommen?
    Ich habe es auf einem Strato-WebSpace getestet und es klappt nicht, dann habe ich es auf meinem lokalen APACHE unter Linux Mint getestet und siehe da, da geht es auch nicht...

    Ich verwende für die POSTs das Tool "POSTMAN", habe den Body befüllt und das Ende vom Lied, das $_POST ist leer.

    Hat jemand sowas schonmal probiert, via POSTMAN auf einen PHP-Server posts abzugeben? Via NodeJS als Server gehts bei mir lokal... Aber das ist ja dann kein PHP... und außerdem eine ganz andere Schnittstelle.

    Anbei ein ScreenShot vom Postman, mit dem auf diese besagte PHP-Schnittstelle zugegriffen werden soll...

    PHP Version 7.2.24-0ubuntu0.18.04.1
    System Linux Isabelle 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64
    Build Date Oct 28 2019 12:07:07
    Server API Apache 2.0 Handler
    Virtual Directory Support disabled
    Configuration File (php.ini) Path /etc/php/7.2/apache2
    Loaded Configuration File /etc/php/7.2/apache2/php.ini
    Scan this dir for additional .ini files /etc/php/7.2/apache2/conf.d


  • #2
    Nachtrag...

    Lokal auf APACHE gehts jetzt...

    $rest_json = file_get_contents("php://input");
    $_POST = json_decode($rest_json, true);
    var_dump($_POST);

    Aber auf dem eigentlichen WebSpace von Strato immernoch nicht... POST ist laut PHP-Info aktiv...

    Aber ich bekomme keinen externen Post angezeigt.

    Kommentar


    • #3
      Die Variable $_POST manuell zu befüllen ist ziemlich pfuschig. Betrachte $_POST als read only. Es gibt keinen Grund da was rein zu schreiben.

      Wenn du JSON-Daten sendest, musst du die gesondert behandeln. Diese Daten landen nicht in $_POST, da das nur mit Formulardaten befüllt wird. Willst du deine Werte im $_POST haben, solltest du Formulardaten mit dem POST-Request senden und keine JSON-Daten.

      Kommentar


      • #4
        Guck dir mal im Browser in der Entwicklerkonsole und in deinem Postman unter "Code" an was da verschickt wird, du wirst relevante Unterschiede feststellen. Das $_POST in PHP hat mit dem POST in HTTP nur in einem Fall etwas zu tun, kann aber auch ganz anders sein. Pseudocode:

        Browser Formular

        Code:
        POST /foo/bar.php
        content-type: text/html
        
        var1=abc&var2=xyz
        Postman HTTP mit JSON

        Code:
        POST /foo/bar.php
        content-type: application/json
        
        {"var1": "abc", "var2": "xyz"}
        Und das musst du unterschiedlich behandeln. Den ersten Fall kann PHP auflösen wie eine URL, den zweiten halt nicht. Wenn du da am Ende immer ein Array raushaben willst kannst du dir eine Request-Klasse schreiben, die die Eingabe anhand des Content-Type entsprechend behandelt und liefert.
        [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

        Kommentar


        • #5
          hallo IceEagle ,
          bitte nutze zukünftig Code tas, die Forensuche (das mit Postman kommt alle nase lang), das richtige Unterforum.

          Kommentar


          • #6
            Danke für die Tipps.

            @hellbringer,

            Zum Pfusch, ich habe irgendwie versucht, mein POST zu erhalten - egal wie, denn das ist es, was ich wollte, aber es funktioniert leider nicht.

            Wenn du sagst, das JSON dort nicht landet, ja wo landet es denn dann? In meiner Frage ging es doch darum, wie kriege ich die Daten vom POSTMAN?
            Das POST ist leer und ich weiß nicht, warum es leer ist.


            Kommentar


            • #7
              Das POST als HTTP-Methode hat mit POST als von PHP interpretiertes Datenformat nichts zu tun. Du brauchst erst den content-type aus $_SERVER["CONTENT_TYPE"] oder getallheaders() - musst du mal ausprobieren - um entscheiden zu können, ob du auf $_POST zugreifen kannst, oder php://input verarbeiten musst.

              Lies dir das durch:

              https://de.wikipedia.org/wiki/Hypert...nsfer_Protocol
              [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

              Kommentar


              • #8
                Zitat von IceEagle Beitrag anzeigen
                Wenn du sagst, das JSON dort nicht landet, ja wo landet es denn dann?
                In php://input. Siehe PHP-Handbuch:

                php://input is a read-only stream that allows you to read raw data from the request body.
                https://secure.php.net/manual/de/wrappers.php.php

                Ich frage mich allerdings, warum du die Daten überhaupt als JSON sendest, wenn du doch in $_POST darauf zugreifen möchtet?

                Kommentar

                Lädt...
                X