Datentransfer mittels PHP über eine XML-Schnittstelle

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

  • Datentransfer mittels PHP über eine XML-Schnittstelle

    Hallo zusammen,

    ich bin damit beauftragt, ein Skript zuschreiben (vorzugsweise in PHP) welches XML Daten an einen Server senden und als Antwort ebenfalls XML Daten empfangen soll.

    Da das für mich absolutes Neuland ist und ich bisher noch nie in die Verlegenheit kam, zwei Server miteinander interagieren zu lassen, tu ich mich auch im Moment richtig schwer, einen Ansatz für dieses Problem zu finden.

    Für den Server, mit dem interagiert werden soll, gibt es einen Testlink.
    Dieser lautet wie folgt: http://217.110.90.105/elvia/booking/...MAIN?OpenAgent

    Mein erstes (und sicher nicht letztes) Problem ist es schon, eine Verbindung mittels PHP zu diesem Server aufzubauen. Ich habe folgenden Ansatz gewählt:

    PHP-Code:
    $fp fsockopen("http://217.110.90.105/elvia/booking/crs.nsf/RSHPMAIN?OpenAgent"80$errno$errstr30);
    if (!
    $fp) {
        echo 
    "$errstr ($errno)<br />\n";
    } else {
        
    $out "GET / HTTP/1.1\r\n";
        
    $out .= "Host: http://217.110.90.105/elvia/booking/crs.nsf/RSHPMAIN?OpenAgent\r\n";
        
    $out .= "Connection: Close\r\n\r\n";

        
    fwrite($fp$out);
        while (!
    feof($fp)) {
            echo 
    fgets($fp128);
        }
        
    fclose($fp);

    Wenn ich dieses Skript dann aufrufe, bricht dieses mit dem Fehlercode 0 ab.
    Verbinde ich jedoch via curl (ohne irgendwelche Daten zu übergeben) zu diesem Server, bekomme ich eine Antwort.

    Könnt Ihr mir sagen, woran das liegt? Ist PHP vielleicht nicht das geeignete Mittel?
    Ich bin für jeden Tipp dankbar!

    Gruß,
    raz667
    Zuletzt geändert von asp2php; 19.03.2008, 10:46.

  • #2
    fsockopen erwartet nur den Host, die URL-Parameter musst du in GET Anforderung angeben. Lese mal die User Contributed Notes http://de2.php.net/manual/en/function.fsockopen.php

    Kommentar


    • #3
      Hi,

      danke für deine Antwort!
      Aber leider hilft mir das nicht sehr viel weiter. Wie gesagt, arbeite ich zum ersten Mal mit Verbindungen zu anderen Servern, also auch mit der Funktion fsockopen().

      Da mir im Moment der Überblick fehlt, fällt es mir auch schwer aus den User Contribute Notes schlau zu werden, sind die mir doch noch ein wenig zu spezifisch und gefüttert mit Infos die mich nur noch weiter verwirren.

      Ist es möglich, mir kurz zu beschreiben, wie ich die XML Daten als GET anforder bzw. kennst du ein Tutorial was sich zufällig genau mit dieser Thematik auseinandersetzt?

      Das würde mir schwer helfen!

      Danke,
      raz

      Kommentar


      • #4
        Ähm ... alle meine Erfahrungen habe ich fast nur aus der Doku und die dazugehörige User Contributed Notes sowie eigene Try 'n Error. Daher kann ich dir leider nichts anderes anbieten.

        Was ist denn so schwer daran? OK, die meisten Bsp. sind POST und HEAD, aber daran kann es doch nicht liegen, oder?

        Kommentar


        • #5
          Hi,

          ehrlich gesagt habe ich auch nicht allzu große Erfahrungen mit Socket-Verbindungen via PHP, da es wohl eher zu den Randthematiken gehört.
          Jedoch habe ich mal eine Update-Funktion zusammengebastelt, die ich dir hier einfach mal poste:
          PHP-Code:
          <?php
          function update_app() {
              
          $url parse_url("http://www.example.com/bla.xml");
              if (!isset(
          $url['port'])) {
                  
          $url['port'] = 80;
              }
              
          $url['query'] =  '';
              
          $url['protocol'] = $url['scheme'].'://';
              
          $eol "\r\n";
              
              
          $headers =  "POST ".$url['protocol'].$url['host'].$url['path']." HTTP/1.0".$eol.
                          
          "Host: ".$url['host'].$eol.
                          
          "Referer: ".$url['protocol'].$url['host'].$url['path'].$eol.
                          
          "Content-Type: application/x-www-form-urlencoded".$eol.
                          
          "Content-Length: ".strlen($url['query']).$eol.$eol.$url['query'];
              
              
          $file = @fsockopen($url['host'], $url['port'], $errno$errstr30);
              if (
          $file) {
                  
          fputs($file$headers);
                  
          $result '';
                  while (!
          feof($file)) {
                      
          $result .= fgets($file500);
                  }
                  
          fclose($file);
                  
                  if (!
          stristr($result'200 OK')) {
                      return 
          false;
                  }
                  
                  
          $result preg_replace('#^.*\r\n\r\n#s'''$result);
                  return 
          simplexml_load_string($result);
              } else {
                  return 
          false;
              }
          }
          ?>
          Das ganze verbindet zu einem Server und holt XML-Daten. Danach werden die HTTP-Header entfernt und das ganze als SimpleXML-Resource zurückgegeben.

          Ich hoffe mal, du kannst das für dich umbauen. Um Daten zu senden, verwendest du dann statt fputs() fwrite().

          Kommentar


          • #6
            Überlass einer HttpClient-Klasse die Drecksarbeit mit dem Socket. Die von Incutio ist ganz ok!

            Kommentar


            • #7
              Curl ?

              BTW:
              Eigentlich kein Xml-Problem -> falsches Forum
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar

              Lädt...
              X