C++ post request an php-server-file

Quaussi

Ensign
Registriert
Aug. 2013
Beiträge
244
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!:
PHP:
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:
Code:
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:
Code:
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):
Code:
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:

Code:
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
 
libcurl, cpp-netlib.
 
Ich hätte zwei Ideen:

  1. die Parameter per
    Code:
    <?php $postdata = file_get_contents("php://input"); ?>
    einzulesen
  2. den Content-Type setzen: Content-Type: application/x-www-form-urlencoded
 
@ Kanibal:

zu 1.: Ich kann leider nicht das php-File bearbeiten :(
zu 2.: den Gedanken hatte ich auch gerade :), leider kein Erfolg [hass]


@HominiLupus:

Ich muss mich darin erstmal belesen....sieht aber auf den ersten Blick so aus, dass ich viel Code verändern muss
-> das nimmt natürlich Zeit weg

Es muss ja auch so gehen.....irgendwie :freak:
 
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.
Warum befolgst du nicht das, was im Buch steht?

http://stackoverflow.com/questions/14551194/how-are-parameters-sent-in-an-http-post-request schrieb:
The content is put after the HTTP headers. The format of an HTTP POST is to have the HTTP headers, followed by a blank line, followed by the request body. The POST variables are stored as key-value pairs in the body.

Code:
POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

home=Cosby&favorite+flavor=flies
 
@Kanibal + Yuuri:

Der Content-Type war doch die Fehlerursache! Problem gelöst.


Leider hänge ich schon am nächsten Problem des php-Skriptes:
Code:
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"); }

Ihr ahnt es bestimmt schon....ich lande im else-Abschnitt.

gesendetes Paket:
Code:
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";
 
Was ist denn der Output deines php-Files? Da müsstes du doch rauskriegen können, was tatsächlich übergeben wurde.
 
@daemon777:
Output: "seltsame Zeichen" + br>[error]:no valid query


Ich denke mal, ich habe die Ursache gefunden, weiß aber noch nicht wie ich diese löse, ohne das php zu verändern.

Wahrscheinliche Ursache: base64_decode
Code:
$query = base64_decode($_POST['query']);
 
Du musst deine $query-Variable, den Username, base64 codieren (Algorithmus dafür).

Das komische Zeichen kommt daher, dass Du base64_decode auf 'User' aufrufst, und dabei vermutlich (UTF-8?) die Zeichen Rǫ ausgegeben werden.
 
ja genau so sehe ich das auch....wäre aber einfacher, wenn ich das php-File bearbeiten könnte....mir wird bestimmt da etwas einfallen

danke nochmal an alle!
 
Zurück
Oben