Jerry: allow_url_fopen Problem

Hallo zusammen,

ich hänge an einer unangenehmen Stelle fest ;-)

Ich suche nun schon den halben Tag nach einer Möglichkeit trotz allow_url_fopen OFF eine enfernte Webseite einlesen zu können.

Ich benötige das ganze um einen AddServer anzusprechen und mir die von dort gelieferten Ergebnisse in meine Webseite zu holen.

Ich habe probiert:

file_get_contents()
  file()
  fopen()
  include()

wobei die Funktionen nicht mehr mit http etc.. funktionieren.

Dann dachte ich mir das ich es mit fsockopen() versuche:

$fp = fsockopen("host.de",80);

if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fputs ($fp, "GET /AddServer/banner.php HTTP/1.0\r\n\r\n");
    while (!feof($fp)) {
        echo fgets($fp,1024);
    }
    fclose($fp);
}

da kommt dann schonmal eine Info zurück ;-)

Allerdings ein 301 Moved Permanently ...

Ich verstehe das nicht, er sagt mir das jede Domain auf dem Server auf die Standard Domain des Servers umgeleitet wird, was aber nicht stimmt, weil wenn ich die Domain im Browser aufrufe klappt alles.

Also muss es ja bedeuten das der Aufruf mit fsockopen() auf dem Server nicht gefunden wird und er daher automatisch auf die Standart Domain weiterleitet, so wie es auf dem Server eingestellt ist.

Aber wieso ?

Sende ich den falschen Request ?

Oder gibt es vieleicht eine bessere Möglichkeit mir die Daten von dem AddServer zu holen ?

Danke für jeden Tipp ...

Grüße, Jerry

  1. hi,

    Also muss es ja bedeuten das der Aufruf mit fsockopen() auf dem Server nicht gefunden wird und er daher automatisch auf die Standart Domain weiterleitet, so wie es auf dem Server eingestellt ist.

    Aber wieso ?

    weil es auf dem server so eingerichtet ist.

    Sende ich den falschen Request ?

    evtl. keinen ausreichenden.
    wie du sicher weißt, senden "normale" browser beim request ja idR. noch weitere angaben wie user agent, referrer etc. mit - die "fehlen" bei dir.
    also merkt der remote server vielleicht, dass die anfrage nicht von einem normalen browser-client kommt, und verweigert deshalb die auslieferung.
    wenn dem so ist - dann wäre es ja auch gut denkbar, dass der serverbetreiber gar keine automatisierten anfragen an seinen service haben will - hast du dich diesbezüglich schon informiert?

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Hi,

      also merkt der remote server vielleicht, dass die anfrage nicht von einem normalen browser-client kommt, und verweigert deshalb die auslieferung.

      ja das war der Fehler ;-)

      Nun bin ich soweit das ich das Resultat bekomme was ich haben will, bis auf eine Kleinigkeit ;-)

      HTTP/1.1 200 OK
      Date: Sun, 31 Oct 2004 20:12:11 GMT
      Server: Apache/1.3.28 (Linux/SuSE) mod_ssl/2.8.15 OpenSSL/0.9.7b mod_python/2.7.10 Python/2.3+ mod_perl/1.28 PHP/4.3.8
      X-Powered-By: PHP/4.3.8
      Connection: close
      Transfer-Encoding: chunked
      Content-Type: text/html

      10b
      HIER DER INHALT
      0

      Erstmal muss der ganze Headerkram wech, was nicht so das Problem ist.
      Aber dann muss noch die 10b wech, nur da ist das Problem das da immer etwas anderes steht, denke mal das ist Speichermüll, wobei die NULL am ende ja heist das dort ende ist, das kenne ich von C ;-)

      Hat da vieleicht jemand einen Tipp ?

      Danke, Jerry

      1. hi,

        Aber dann muss noch die 10b wech, nur da ist das Problem das da immer etwas anderes steht, denke mal das ist Speichermüll,

        "müll", den vermutlich dein script dort ausgibt.

        wobei die NULL am ende ja heist das dort ende ist, das kenne ich von C ;-)

        nö. dann würde sie ziemlich sicher nicht sichtbar ausgegeben.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
      2. Hallo Jerry,

        Transfer-Encoding: chunked

        Du bekommst eine HTTP/1.1-Antwort mit Transfer-Encoding: chunked. Das ist der "Datenmüll", den Du siehst.

        Hat da vieleicht jemand einen Tipp ?

        Probiere mal, die HTTP-Header

        Accept-Transfer-Encoding: entity, *;q=0
        Connection: close

        zu senden, vielleicht sendet der Server dann ja Content, den Du verarbeiten kannst. Wenn nicht, musst Du Transfer-Encoding: chunked interpretieren - wie das geht, steht in RFC 2616 - dem HTTP-Standard.

        Viele Grüße,
        Christian