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übergabePHP-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 gehennaja ich entscheide morgen
danke nochmal
-
$query = $_POST['query'];
Aber der den code geschrieben hat, hat sich evtl. etwas dabei gedacht.