HTTP POST von C++ an Apache/PHP



  • Und wie liest du das Ergebnis aus, und wie sendest du überhaupt den Request, und und und



  • wo ist der HOST: ?



  • Host ist z.B. zum Test ein lokaler Apache, zum senden selbst kann ich nur sagen, läuft über eine sendMsg() einer TCP Klasse und das empfangen über getMsg() (denke das ist doch echt nebensache).

    die php Datei selbst beinhaltet zum test nur:

    <PHP
    print_r($_POST);
    ?>
    


  • Wenn das alles nebensächlich ist, was hat die Frage dann mit dem BCB zu tun, ausser, dass du zufällig diese IDE verwendest?



  • @Jansen dann verschiebe denn Eintrag halt, ich kann das leider nicht.



  • IcemanX schrieb:

    zum senden selbst kann ich nur sagen, läuft über eine sendMsg() einer TCP Klasse und das empfangen über getMsg()

    Kenn beide Funktionen nicht. Sind die im Lieferumfang der VCL enthalten?

    IcemanX schrieb:

    (denke das ist doch echt nebensache).

    Wieso?



  • @junix - sind auch nicht aus VCL, ich schreibe Programme möglichst unabhängig und verwende für Sachen wie SQL, TCP usw. nur eigene Sachen, da diese stabieler und schneller sind. Aber das ist wircklich nebensache, außerdem ist noch gar keinen Aufgefallen das der Stück Source ein Java-Source ist. Hätte eigentlich sofort an "Integer.toString" auffallen müssen !!!

    Aber bitte zurück zum Thema, wie sende ich einen POST richtig, so das das Ergebnis auch sinvoll ist. Ob ich das dann per C++, BCB++ oder Java oder C# oder oder oder mache ist ja wohl egal da das Ergebnis immer das gleiche sein muss.



  • meines wissens sieht das anders aus (aber wer weiß, was deine funtkionen da schon zaubern..):

    POST /pub/WWW/TheProject.html HTTP/1.1
              Host: www.w3.org
    

    schau dir zur sicherheit das http://www.faqs.org/rfcs/rfc2068.html an.

    nur zum vergleich: folgendes über php gestartetes skript funktioniert.

    <?php
    
    function PostToHost($host, $path, $referer, $data_to_send) {
      $fp = fsockopen($host,80);
      printf("Open!\n");
      fputs($fp, "POST $path HTTP/1.1\r\n");
      fputs($fp, "Host: $host\n");
      fputs($fp, "Referer: $referer\n");
      fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
      fputs($fp, "Content-length: ".strlen($data_to_send)."\n");
      fputs($fp, "Connection: close\n\n");
      fputs($fp, "$data_to_send\n");
      printf("%s", $data_to_send);
      printf("Sent!\n");
      while(!feof($fp)) {
          $res .= fgets($fp, 128);
      }
      printf("Done!\n");
      fclose($fp);
    
      return $res;
    }
    
    $data = "blub=hi";
    
    printf("Go!\n");
    $x = PostToHost(
                  "localhost",
                  "/weiter.php",
                  "http://localhost/weiter.php",
                  $data
    );
    


  • elise schrieb:

    meines wissens sieht das anders aus (aber wer weiß, was deine funtkionen da schon zaubern..):

    was sieht anders aus???

    aber vielen dank für das beispiel werde es gleich mal auf meinen code anwenden, sag dir dann das ergebnis



  • lies das rfc. damit kommst du wohl am weitesten 😉



  • Mal abgesehen davon, das Elise mit ihrem Verweis auf die RFC absolut recht hat.

    IcemanX schrieb:

    @junix - sind auch nicht aus VCL, ich schreibe Programme möglichst unabhängig und verwende für Sachen wie SQL, TCP usw. nur eigene Sachen, da diese stabieler und schneller sind.

    War mir schon klar. Implizit wollte ich dabei Zweifel an der Korrektheit der empfangenen Daten erheben.

    IcemanX schrieb:

    Aber das ist wircklich nebensache,

    Wieso ist das Nebensache? Ich erhebe zweifel an der Korrektheit deiner Empfangsroutinen, denn egal was du an den HTTP-Server sendest, es müsste zumindest eine HTTPmässige Antwort kommen. Tut aber nicht.

    IcemanX schrieb:

    außerdem ist noch gar keinen Aufgefallen das der Stück Source ein Java-Source ist. Hätte eigentlich sofort an "Integer.toString" auffallen müssen

    Und was genau willst du jetzt damit sagen? Ich würde sagen, für einen Bittsteller schlägst du nen reichlich unverschämten Ton an.

    Aus diesem Grund würde ich mal sagen: Lies die RFC, dann erledigt sich deine Frage von Alleine. Wenn du ja alleine beurteilen kannst, was falsch ist an deinem Code und was nicht, und wir offensichtlich zu dumm sind zu erkennen, das da Java-Code gepostet wurde (wieso eigentlich? Sind wir ein Java-Forum hier?), dann Löse dein Problem. Die unterlagen hast du ja jetzt.

    IcemanX schrieb:

    Aber bitte zurück zum Thema, wie sende ich einen POST richtig, so das das Ergebnis auch sinvoll ist. Ob ich das dann per C++, BCB++ oder Java oder C# oder oder oder mache ist ja wohl egal da das Ergebnis immer das gleiche sein muss.

    Diese Frage wurde durch Elise beantwortet.



  • @junix - die einzigen die hier immer einen reichlich unverschämten Ton drauf haben sind manche Moderatoren und das ist nicht nur meine Meinung.

    @elise - vielen vieln dank nochmal, bekomme nun zwar "400 Bad Request", aber immerhin eine HTTP Antwort.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hab bis jetzt ja noch nie HTTP direkt selbst gesendet, hat einer ne Idee von was "400 Bad Request" kommen kann?



  • mach doch einfach mit php über konsole wie oben gezeigt.. und schau, was du bei deinem skript fürn falsche header sendest.



  • PHP geht bei mir!

    hier mal der Header den mein Prog. sendet.

    POST /java_redirect.php HTTP/1.1
    Host: 192.168.1.66/agentel
    Referer: http://192.168.1.66/agentel/java_redirect.php
    Content-type: application/x-www-form-urlencoded
    Connection: close
    User-Agent: Java-Applet-Agentel
    Content-Length:19
    
    p1=test1&p2=test2
    


  • gib mal als host nur die 192.168.1.66 ohne ordner und close die connection.

    400 ist ein schreibfehler..



  • Besten Danke, das wars!!!! 🙂


Anmelden zum Antworten