XML auslesen vom fremden Server

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

  • XML auslesen vom fremden Server

    Aloha,

    habe gesucht und nix entsprechendes gefunden. Ich möchte gerne eine XML-Datei mittels DOM auslesen und verarbeiten.

    Soweit klappt das auch schon alles. Solange die XML-Datei auf meinem Server liegt:

    PHP-Code:
    $serv      "http://localhost/test/";
    $xmllive     "live_viewall.xml";
    $file = new DOMDocument();
    $file->load($serv.$xmllive);
    $livematches $file->getElementsByTagName("Match"); 
    In das Kreuz springt mir allerdings die Routine, wenn ich das von einem anderen Server laden möchte und die Endung nicht xml ist:

    PHP-Code:
    $serv      "http://www.sonstwo.org/";
    $xmllive     "details.asp?outputType=XML&Number=555";
    $file = new DOMDocument();
    $file->load($serv.$xmllive);
    $livematches $file->getElementsByTagName("Match"); 
    Dann bekomme ich einen XML-Verarbeitungsfehler. Was muss ich dort ändern, geht das überhaupt so?

    Danke für die Hilfe
    Ralpho

  • #2
    hab grad keine Ahnung ob man ->load(); auch ne Url als Parameter übergeben kann - im Zweifelsfall das xml erstmal mit file(); oder fsockopen() usw... in ne Var einlesen und dann mit ->loadxml(); laden. Wenns dann nicht geht, wird das xml wohl ned valide sein.
    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


    • #3
      Also den localhost konnte ich ja als URL öffnen... Ich will Deine Tipps mal ausprobieren.

      Kommentar


      • #4
        Habs grad gesehen, sollte prinzipiell gehen - wenn 'allow_url_fopen' bei dir nicht auf 'off' (phpinfo() gibt Auskunft darüber) ist, sollte PHP eigentlich kein Problem haben das XML vom entfernten Server zu laden. Ansonsten geh ich eher davon aus, das mit dem XML was nicht stimmt.

        Was für einen 'Verarbeitungsfehler' kriegst denn?
        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


        • #5
          Ich vermute, dass der fremde Server die Ressource mit keinem für XML passenden Content-type ausliefert.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Würde das PHP - DOM stören?

            Wenn's so wäre, könnte es wirklich sinnvoll sein, das XML erstmal in nen String einzulesen und dann mit ->loadxml(); zu laden.
            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


            • #7
              Das XML-File ist in Ordnung. Ich kann mir das im Browser anschauen und dann mit safe as auch speichern. Diese local gespeicherte Datei kann ich dann auch sauber verarbeiten mit load().

              Irgendwas passt immer nicht. Hat denn jemand mal einen Link zu einem "einfachen" fsockopen-Beispiel, wo der Quelltext in eine Variable geladen wird, dann wäre ich diesem sehr dankbar ;o)

              Kommentar


              • #8
                fsockopen in den Beispielen und User-Notes sollte was für dich dabei sein.
                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


                • #9
                  Ok, danke! Folgende Fehlermeldung:

                  Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (122880000)

                  Kommentar


                  • #10
                    Erhälst du bei was für nem Code?

                    EDIT:
                    Für den Fall der Fälle:
                    Falls du fsockopen mit 'http://www.xxx.de' aufgerufen haben solltest - an fsockopen übergibst du nur nen Hostnamen ohne http:// oder einfach nur ne IP.
                    Zuletzt geändert von Quetschi; 17.03.2006, 17:17.
                    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


                    • #11
                      Panne, natürlich *sorry*
                      PHP-Code:
                      $fp fsockopen("http:/www.test.org/Details.asp?outputType=XML&D=69134231"80$errno$errstr30);
                      if (!
                      $fp) {
                         echo 
                      "$errstr ($errno)<br />\n";
                      } else {
                         
                      $out "GET / HTTP/1.1\r\n";
                         
                      $out .= "Host: [url]www.test.org\r\n[/url]";
                         
                      $out .= "Connection: Close\r\n\r\n";

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

                      Kommentar


                      • #12
                        1. siehe oben - an fsockopen() wird NUR der Hostname übergeben - sonst gar nix.
                        2. Was du dann aufrufen willst, kommt beim GET-Request rein - also 'GET /Details.asp?outputType=XML&D=69134231 HTTP/1.1\r\n'

                        3. die while-Schleife musst dir natürlich noch entsprechend anpassen, damit der Response nicht einfach ausgegeben wird sondern in ner Var abgelegt wird.

                        Ferner musst du beachten, dass du hier nicht nur das XML zurückbekommst, sondern auch die http-header der Server-Antwort - den musst du abtrennen.
                        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


                        • #13
                          Oje, ich verstehe was Du schreibst, werde es aber nicht proggen können. Dazu fehlt mir ein wenig der Background. Kannst Du mir bitte noch mal ein zwei Befehle geben. Dann bastele ich mir das auch brav zurecht

                          Kommentar


                          • #14

                            PHP-Code:
                            $fp fsockopen("www.test.org"80$errno$errstr30);
                            if (!
                            $fp) {
                               echo 
                            "$errstr ($errno)<br />\n";
                            } else {
                               
                            $out "GET /Details.asp?outputType=XML&D=69134231 HTTP/1.1\r\n";
                               
                            $out .= "Host: www.test.org\r\n";
                               
                            $out .= "Connection: Close\r\n\r\n";

                               
                            fwrite($fp$out);
                               while (!
                            feof($fp)) {
                                   
                            $resp .= fgets($fp128);
                               }
                               
                            fclose($fp);

                            //Header abtrennen
                            $resp explode("\r\n\r\n",$resp);
                            unset(
                            $resp[0]);
                            $resp implode("",$resp);



                            ungetestet - der Header wird per explode am ersten doppelten Zeilenumbruch der Serverantwort abgetrennt.
                            Zuletzt geändert von Quetschi; 17.03.2006, 17:42.
                            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


                            • #15
                              Danke erstmal.

                              Leider bekomme ich nun als Antwort einfach nur ein

                              Bad Request

                              Ich habe noch ein Unterverzeichnis, wo ich hin muss. Das habe ich auch zum get-Befehl gemacht. Was muss eigentlich genau beim Host: stehen? Muss das passen?

                              Hier noch mal meine Abfrage:
                              PHP-Code:
                              $serv   "www.test.org";
                              $getreq "/Common/Details.asp?outputType=XML&ID=9213693";

                              $fp fsockopen("$serv"80$errno$errstr30);
                              if (!
                              $fp) {
                                 echo 
                              "$errstr ($errno)<br />\n";
                              } else {
                                 
                              $out "GET //$getreq";
                                 
                              $out .= "Host: [url]http://www.test.org[/url]";
                                 
                              $out .= "Connection: Close\r\n\r\n";

                                 
                              fwrite($fp$out);
                                 while (!
                              feof($fp)) {
                                     
                              $resp .= fgets($fp128);
                                 }
                                 
                              fclose($fp);

                              //Header abtrennen
                              $resp explode("\r\n\r\n",$resp);
                              unset(
                              $resp[0]);
                              $resp implode("",$resp);

                              }
                              echo 
                              $resp

                              Kommentar

                              Lädt...
                              X