post request an php-server-file



  • Hallo liebe Community,

    folgendes Problem:
    Ich möchte über einen HTTP Request mit der POST-Methode Parameter an ein php-File übermitteln und dann auf Antwort warten.
    Verbindung zum Server funktioniert!
    Einziges Problem: Parameterübergabe

    PHP-Skript...nur die ersten beiden Zeilen!:

    if(!array_key_exists('query', $_POST))
        die("[error]:no query");
    

    Die php-Fehlermeldung ([error]:no query) wird mir zurückgegeben. Am php-Skript darf ich keine Änderung vornehmen.
    Ich habe die POST Methode anscheinend noch nicht richtig verstanden.

    folgendes Paket sende ich zum php-Skrip:

    static const char *HEADERS = "POST /CamS/rfid.php HTTP/1.1\r\n"
                                 "Host: 141.xx.xx.xx\r\n"
                                 "Content-Length: ";
    static const char *BODY = "query=User";
    

    gesendet wird über den Befehl:

    char *buffer = malloc(strlen(BODY) + strlen(HEADERS) + 256);
    sprintf(buffer, "%s%d\r\n\r\n%s\r\n\r\n", HEADERS, strlen(BODY), BODY);
    

    Ich denke mal, dass der Parameter bei mir falsch übergeben wird.
    Im Buch lese ich, dass der Parameter für POST-Methode im Body übergeben wird.
    Jetzt sende ich allerdings an ein php-Skript und ich vermute, dass der Parameter im Header stehen muss.
    Folgendes habe ich noch versucht ohne Erfolg, immer der selber Fehler ([error]:no query):

    static const char *HEADERS = "$_POST['query']=User /CamS/rfid.php HTTP/1.1\r\n"
                                 "Host: 141.xx.xx.xx\r\n"
                                 "Content-Length: ";
    static const char *BODY = "";
    

    und:

    static const char *HEADERS = "POST /CamS/rfid.php HTTP/1.1\r\n"
                                 "query: User\r\n"
                                 "Host: 141.xx.xx.xx\r\n"
                                 "Content-Length: ";
    static const char *BODY = "";
    

    Hoffentlich hat jemand von euch einen guten Einfall.
    Grüße



  • ET-Fighter schrieb:

    Im Buch lese ich, dass der Parameter für POST-Methode im Body übergeben wird.
    Jetzt sende ich allerdings an ein php-Skript und ich vermute, dass der Parameter im Header stehen muss.

    Nein, die Parameter gehören in den Body.

    Schicke mal Content-Type: application/x-www-form-urlencoded
    bei den Headern mit.

    Wieso hast du Content-Length leer gelassen? Da gehört die Länge des Bodies rein (in Bytes).



  • Super funktioniert mit Content-Type! Problem gelöst.
    Die Content-Length wird beim Senden direkt berechnet und angehangen:

    sprintf(buffer, "%s%d\r\n\r\n%s\r\n\r\n", HEADERS, strlen(BODY), BODY);
    

    Leider hänge ich schon am nächsten Problem des php-Skriptes:

    if(!array_key_exists('query', $_POST))
        die("[error]:no query");
    
        /*POST field key*/
        $query = base64_decode($_POST['query']);
    
        if(strcmp($query, "User") == 0)
        {...}
        else {
        echo("$query<br>");
        die("[error]:no valid query"); }
    

    Ich lande im else-Abschnitt.

    gesendetes Paket:

    static const char *HEADERS = "POST /CamS/rfid.php HTTP/1.1\r\n"
                                 "Content-Type: application/x-www-form-urlencoded\r\n"
                                 "Content-Length: ";
    static const char *BODY = "query=User";
    

    Sieht jemand den Fehler?



  • ET-Fighter schrieb:

    Die Content-Length wird beim Senden direkt berechnet und angehangen:

    Oh pardon, habe ich übersehen.

    $query = base64_decode($_POST['query']);
    

    Bist du dir mit dem base64_decode sicher? Die Daten sehen für mich nicht nach base64 aus.



  • Jo ich glaub du hast Recht.
    Leider ist das php-Skript vorgegeben.
    Naja vielleicht komme ich irgendwie daran....müsste theoretisch nur die decodierung entfernen.



  • Alternativ könntest auch die Daten, die du sendest, encodieren.
    Dafür gibt's bestimmt libs.



  • Du musst "User" eben vor dem Senden base64 codieren, wenn das script es so will.
    "User" wäre dann "VXNlcg=="



  • habe mich schon darin belesen 🙂

    lib einbinden oder wenn möglich php bearbeiten...mal sehen
    php bearbeiten würde wahrscheinlich schneller gehen

    naja ich entscheide morgen 🙂

    danke nochmal



  • $query = $_POST['query'];
    

    Aber der den code geschrieben hat, hat sich evtl. etwas dabei gedacht.


Anmelden zum Antworten