XML per HTTP-POST senden+empfangen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML per HTTP-POST senden+empfangen

    Hi zusammen!

    Ich habe in PHP ein Script erstellt, das ein XML-Dokument mit fgets() einliest und es dann über SSL mit fsockopen() und fputs() per HTTP-POST an einen Server übertragt. Das klappt auch einwandfrei.

    Jetzt versuche ich ein Gegenstück zu erstellen. Also ein PHP-Script, das solche über SSL eingehenden HTTP-POSTs animmt - also alle eingehenden POSTs erstmal in einem Array oder einer Variable verfügbar macht.
    Wenn ich auf meinen Server poste scheint er auch alles anzunehmen, aber wie komme ich nun an den POST ran? print_r($_POST) enthält keine Daten und in $_SERVER finde ich auch keine XML-Daten. (Hätte mich auch gewundert...) Ist das Empfangen des POSTs nur mit den experimentellen PHP-Funktionen socket_accept(), socket_listen(), socket_write() etc. möglich? Oder übersehe ich da was? Hoffe mir kann jemand weiterhelfen!

    Schonmal DANKE im voraus!

  • #2
    soweit ich weiß müsste es so sein, dass wenn du dein POST paket richtig gestaltet hast, es auf jeden fall in $_POST erscheinen wird. sollte es nicht der fall sein, lassen sich 2 oberflächliche (wenn auch durch mangelnde information bedingte) schlussfolgerungen machen:

    a) die anfrage ist falsch zusammengestellt und/oder
    b) das script zur annahme der daten enthält fehler

    Kommentar


    • #3
      Hier das Script, das die XML-Daten per POST sendet:
      PHP-Code:
      $file "";
      $fp1 fopen("/home/blablabla/blubb.xml","r");

      while(!
      feof($fp1))
      {
          
      $file1 fgets($fp1100);
          
      $file $file.$file1;
      }

      $data "";
      $fp fsockopen("ssl://sub.irgendwas-mit-ssl.com",443,$errstr,$errno);
      if(!
      $fp)
      {
          die();
      }
      else
      {
          
      fputs($fp"POST /verzeichnis/script.php HTTP/1.1\r\n");
          
      fputs($fp"Host: sub.irgendwas-mit-ssl.com\r\n");
          
      fputs($fp"Content-length: "strlen($file) ."\r\n");
          
      fputs($fp"Connection: close\r\n\r\n");
          
      fputs($fp$file);
      }
      while(!
      feof($fp))
      {
          
      $fget fgets($fp128);
          
      $data .= $fget;
      }
      fclose($fp); 
      Das Script an das Daten mit Hilfe des oben stehenden Quellcodes geschickt werden soll (also "sub.irgendwas-mit-ssl.com/verzeichnis/script.php" ), soll mir die Daten erstmal nur ausgeben. Aber ich weiß nicht wie ich die Daten ansprechen kann.

      Im Annahme-Script steht zum testen erstmal nur:

      echo count($_POST);

      Der Browser zeigt aber 0 an. Also gar kein Array vorhanden und auch keine POST-Daten in $_POST vorhanden.

      Wo könnte denn der Fehler liegen, wenn die Daten sonst wirklich in $_POST enthalten sein müssten?

      Kommentar


      • #4
        1. nimm statt echo count() direkt print_r()
        2. evtl. noch diesen header mit rein:
        PHP-Code:
        fputs($fp"Content-type: application/x-www-form-urlencoded\r\n"); 
        3. versuch mal $file vorm senden folgendermaßen vorzubereiten:

        PHP-Code:
        $file str_replace("\r"''$file); 
        $file str_replace("\n"''$file);
        $file urlencode($file);

        $file 'mydata='.$file

        Kommentar

        Lädt...
        X