PHP-Skript nimmt keine POST-Anfragen an

  • Moin!

    Ich beschäftige mich nun schon seit mehreren Stunden und Wochen, von einer Desktopanwendung eine POST-Anfrage an ein PHP-Skript auf meinem Webhosting (hier bei netcup) zu senden. Ich erfolgloser Suche im Programmcode habe ich mir mal das PHP-Skript genau angeschaut, da war alles richtig, ich mache das nicht zum ersten Mal. :D Ich habe dann auch mal mit Postman eine Anfrage an das Skript getestet, leider erfolglos.


    Das Problem ist, dass die POST-Data immer leer ist.

    Hier ein vereinfachtes Testskript, welches nur die Post-Data ausgibt:



    Sende ich mit Postman eine POST-Anfrage (mit korrektem Content-Type und allem drum und dran) an dieses Skript, dann bekomme ich folgende Antwort:


    Die POST-Data ist leer, ich weiß leider überhaupt nicht wieso. Das wirklich komische ist, dass exakt dasselbe Skript mit der exakt gleichen Postman-Config auf einem Server bei bplaced funktioniert:


    Was hat es damit auf sich? Ich bin an diesem Problem langsam echt am Verzweifeln... ^^ Sind auf den netcup-Servern POST-Anfrage aus irgendeinem Grund blockiert, geht das überhaupt, oder muss ich das irgendwo aktivieren?


    Falls notwendig: Bei netcup habe ich das Webhosting 2000 SE. PHP-Version 8.2.1


    Vielen Dank für Ratschläge, und schönes Wochenende!


    Viele Grüße,

    Piet


    PS: Ja, ich habe auch sehr intensive Gespräche mit ChatGPT geführt. ^^ Leider hat man sich da nach einiger Zeit auch im Kreis gedreht.


    Edit: im PHP-Skript gibt $_SERVER['REQUEST_METHOD'] GET aus. Irgendwas ist da faul.

  • Kannst Du Dir ganz am Anfang mal das ganze $_SERVER Array mit var_dump() ausgeben lassen?


    Dann siehst Du schon mal, ob da wirklich ein POST-Request ankommt.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Es schient aus irgendeinem Grund als GET-Anfrage anzukommen.

  • Kannst Du Dir mal ein simples HTML-Formular bauen und es damit testen?


    Ein Beispiel gibt es z.B. hier: https://developer.mozilla.org/…form_data#the_post_method




    EDIT: Scheint aber nicht am PHP-Script zu liegen, das antwortet korrekt mit den POST-Daten…

    Code
    $ curl --data "test=123&ich=du" -is 'https://*****/api/test/index.php' | less -S
    
    POST: array(2) {
      ["test"]=>
      string(3) "123"
      ["ich"]=>
      string(2) "du"
    }

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    4 Mal editiert, zuletzt von KB19 ()

  • Kannst du mal deine Postman Konfiguration prüfen, ob da nicht doch noch irgendwo GET gesetzt ist?


    Inspiriert von KB19 und der Angabe deines API Endpoints habe ich mal curl auf dein Script losgelassen.


    Code
    curl --data "name=test123&email=mail@example.com" -is 'https://backend.omsi-tools.de/api/test/index.php'

    Resultat

    Also am Script oder Server scheint es nicht zu liegen.

  • In Postman verwendest du kein https:// vor der Adresse. Ich vermute Postman wird nach dem 301-Redirect von http auf https mit einem GET anfragen.


    Damit nach einem Redirect auch die selbe Methode verwendet wird, wäre ein 308-Redirect besser.

    RS Brezn | VPS 500 G8 Plus | 2× VPS Karneval 2020 | VPS Pocket Admin | RS Cyber Quack | VPS 500 ARM


    Dieses Gebäude hat mir die Vorfahrt genommen! *hup*

    Danke 1 Gefällt mir 1
  • In Postman verwendest du kein https:// vor der Adresse.

    Ja, das war teilweise die Lösung. Außerdem musste ich noch ein Slash hinter die eigentliche URL setzen, also: backend.omsi-tools.de/api/test --> http://backend.omsi-tools.de/api/test/. Ich bin da drauf gekommen, als ich testweise nochmal index.php hinter die URL gehangen habe, da ging es nämlich.


    Danke für eure Hilfe!

  • Eine Anmerkung noch zum Script: Ich würde immer einen korrekten Rückgabewert vorsehen. Sofern ein PHP-Script beispielsweise Daten im JSON-Format verarbeiten soll (etwa für CSP-/ECT-/PKP-/TLS-Berichte, aber auch für Debug-Zwecke) ist zudem die Übernahme der POST-Inhalte in „Rohform“ möglich:

    PHP
    // Send `204 No Content` status code.
    http_response_code(204);
    
    // Get the raw POST data.
    $data = file_get_contents('php://input');

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing

    Gefällt mir 1