fsockopen + Serverantwort auswerten

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

  • fsockopen + Serverantwort auswerten

    Hallo zusammen

    ich stehe bei einem kleinen Script ein wenig auf der Stelle. Das Ziel
    des ganzen ist es URL's von RSS Feeds aus einer MySql DB zu lesen
    und die URL's mittels einer Socketverbindung zu prüfen, ob die
    Dateien noch dortliegen.
    Es funzt eigentlich wunderprächtig nur einige Adressen sind
    irgendwie "strange". Im Browser funzt es die URL ohne Probleme
    aufzurufen (der Server meldet 200 OK zurück, Header habe ich
    geprüft). Wenn ich jetzt aber denselben URL mittels fsockopen
    abfrage dann gibt der Server einen 400-er Bad Request zurück.
    PHP-Code:
    $data parse_url('http://www.swissinfo.org/sde/swissinfo.html?siteSect=1111');
    $host $data['host'];
    $path $data['path'];
    $query $data['query'];
    $fp fsockopen($host,80);
    if(
    $fp === false){
        
    $sql "Update news_arr set online='0' where http='$erg[http]'";
        
    mysql_query($sql);
        echo 
    $erg['http'].'<br />';
        continue;
    }
    $in "GET ".$path."?".$query." HTTP/1.0\r\n";
    $in .= "Hostname: $host\r\n";
    $in .= "Connection: close\r\n\r\n";
    fputs($fp,$in);
    while(!
    feof($fp)){
        
    $temp .= fgets($fp,4096);
    }
    fclose($fp);
    if(!
    strpos($temp,'200 OK')){
        
    $sql "Update news_arr set online='0' where http='$erg[http]'";
        
    mysql_query($sql);
        
    //echo $data['scheme'].'://'.$data['host'].$data['path'].'?'.$data['query'].'<br />';
        
    echo $temp;
    }
    else{
        
    $sql "Update news_arr set online='1' where http='$erg[http]'";
        
    mysql_query($sql);

    Fehlt in meinem Request etwas was gewisse Server dazu veranlassen könnte den Fehler zu werfen

    Vielen Dank für eure Hilfe
    Gruss

    tobi
    Zuletzt geändert von jahlives; 15.12.2005, 08:24.
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

  • #2
    hmm, was ergibt eine Testausgabe von $in ??
    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
      @quetschi
      Die Testausgabe ergibt nichts ungwöhnliches
      Code:
      GET /sde/swissinfo.html?siteSect=1111 HTTP/1.0
      Hostname: www.swissinfo.org
      Connection: close
      Bei anderen Servern funzen die Header. Ich kanns mir wirklich nicht erklären

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        PHP-Code:
        $in "GET ".$data['scheme'].'://'.$host.$path.'?'.$query." HTTP/1.0\r\n"

        Kommentar


        • #5
          @onemorenerd

          Hau die Url mal beim Analyse-Tool von 'derHund' rein:
          http://tools.nophia.de/werkzeuge-htt...alysieren.html

          Der sendet scheinbar das GET auch ohne der Schema-Angabe ab (HTTP1.0 anklicken!).
          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


          • #6
            Original geschrieben von Quetschi
            Der sendet scheinbar das GET auch ohne der Schema-Angabe ab (HTTP1.0 anklicken!).
            Wenn du "HTTP 1.0 (mit Angabe des Hosts)" klickst, wird die komplette URL gesendet. Angezeigt wird sie nicht, die Anzeige unterscheidet sich nicht von der nach "HTTP 1.0". Das Ergebnis ist aber verschieden: mit Host 200, ohne 400.

            Da muß derHund nochmal ran!

            Kommentar


            • #7
              Original geschrieben von onemorenerd
              Da muß derHund nochmal ran!
              Und jahlives wohl auch
              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


              • #8
                Gnaa, ich nehm alles zurück, derHund's Tool machts schon richtig und zeigt es auch korrekt an - die Host-Zeile hab ich grad gesehen, als ich den Tab schließen wollte.

                Und meine erste Antwort ist auch voll daneben. *peinlich*

                @jahlives: Ändere mal "Hostname:" in "Host:" ... und vergib mir, ich bins nicht gewohnt, so früh aufzustehen.

                Kommentar


                • #9
                  Dann muss onemorenerd wohl noch mal ran
                  Alle müssen nochmal ran
                  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


                  • #10
                    ich bin dran

                    wie wär's mit HEAD anstatt GET, das reicht ja schon aus, _und_ Host und nicht Hostname

                    btw. warum schau keiner von euch in Manual nach? IMHO gibt's viele Bsp. unter den User Contributed Notes

                    Kommentar


                    • #11
                      Wie gesagt, ich bin zu früh aufgestanden. Aber langsam laufe ich warm.

                      Kommentar


                      • #12
                        @onemorenerd && quetschi
                        Vielen Dank für Eure Antworten. Mit der Zeile
                        PHP-Code:
                        $in "GET ".$data['scheme'].'://'.$host.$path.'?'.$query." HTTP/1.0\r\n"
                        Brachte ich die meisten Fehler weg. Jetzt sind es nur noch zwei und dort kriege ich einen 403-er. Das "Witzige" dabei ist, dass das Fehler Dokument einen Link enthält der anscheinend aus dem Request des Browsers generiert wird. So nach dem Motto 'Error occured while retrieving the following URL (dann kommt der Link)' Wenn ich aber auf den Link klicke dann komme ich sofort auf das gewünschte XML File

                        Aber eben es sind nur noch zwei und die krieg ich auch noch hin.
                        Danke nochmals für die Hilfe
                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          OffTopic:
                          wann stehst du denn auf? ich bin in der Woche jeden Tag um 6:45 schon auf, da meine Kinder um 7:45 Schule haben

                          Kommentar


                          • #14
                            Um die letzten zwei verbleibenden noch abzufragen, habe ich jetzt halt
                            auf file_get_contents() zurückgegriffen. Die 403-er sind weg mit den
                            genau gleichen URL's. Finde ich zwar komisch, aber was solls.
                            Jetzt ist das Problem eben wieder, dass mein Hoster die URL Wrapper
                            deaktiviert hat und mit php5 der ini_set('url_open',true) nicht mehr
                            funzt. Aber immerhin funzt es lokal.
                            OffTopic:

                            @asp2php
                            Habe diese Woche Nachtschicht und meinen Schlaf noch vor mir *gähn*



                            Gute Nacht

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              OffTopic:
                              @asp2php: heute wars 5 Uhr. Ich habe keine Kinder und bin Student - mein Schlafrythmus ist mit deinem nicht zu vergleichen.


                              jahlives, du solltest das nicht so machen!

                              Falsch:
                              GET: http://www.example.com/path/file.ext?var=val\r\n

                              Auch falsch:
                              GET: /path/file.ext?var=val\r\n
                              Hostname: www.example.com\r\n

                              Richtig:
                              GET: /path/file.ext?var=val\r\n
                              Host: www.example.com\r\n

                              So nach dem Motto 'Error occured while retrieving the following URL (dann kommt der Link)' Wenn ich aber auf den Link klicke dann komme ich sofort auf das gewünschte XML File
                              ... weil dann dein Browser einen korrekten Request sendet.

                              Kommentar

                              Lädt...
                              X