fsockopen

bauchinj

Erfahrenes Mitglied
Hallo!

Ich muss mir XML-Daten von einem entfernten Server holen. Problem ist, dass dieser Server IP-Adressen gesperrt hat, bzw. nur gewisse freigegeben hat. D.h. mein Problem ist, dass ich nicht weiß, ob ich nun über den Server (dessen IP freigegeben ist) oder über meinen Arbeitsplatz (nicht freigegeben) zugreife. Ich bekomme vom entfernten Server die Meldung 302 Object Moved, wie kann ich prüfen, ob mein Aufruf richtig ist?
 
Ich denke mal die Abfrage geht von deinem Arbeitsplatz zu dem Server und dann zu dem externen Server.
Für welchen Zweck soll es denn sein? (Vielleicht existiert die Datei wirklich nicht mehr.)
 
Soll XML Daten holen und in eine Datenbank schreiben -> der externe Server soll mir diese Daten bereitstellen! Es kann durchaus sein, dass die IP noch nicht freigegeben wurde, wie kann ich dass prüfen?

Hier mal mein code:

PHP:
$fp = fsockopen($serv, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} 
else {
     $out = "";
    $out .= "GET /$getreq HTTP/1.1\r\n";
    $out .= "Host:".$host."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    
    fwrite($fp, $out);
    while (!feof($fp)) {
        $resp .= fgets($fp, 128);
    }
    fclose($fp);
    
    echo $resp;
    //Header abtrennen
    $resp = explode("\r\n\r\n",$resp);
    unset($resp[0]);
    $resp = implode("",$resp);
}

Meiner Meinung ist er aber korrekt.
 
Hey,

naja wenn der Server jegliche Verbindung zu deiner IP gesperrt hat,
dann würde folgendes eintreten:
PHP:
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
}
wenn das Skript in den Else Zweig gelangt, dann kann es nicht an den Server liegen


mfg

bo
 
Hey,

PHP:
$fp = fsockopen($serv, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
}

Er ist richtig, wenn du $serv noch initialisiert hast ;)

Jedoch musst du auch drauf achten, dass der Port 80 "zugänglich ist und du den Server auch mit dem "richtigen" Protokoll ansprichst.
So wie dein Beispiel lautet sendest du ihn meines Wissens nach TCP Pakete.

mfg bo
 
Hab
PHP:
$serv = "www.test.com";

und Protokoll muss ich sozusagen beim externen serverbetreiber nachfragen, welches ich verwenden muss? Wie kann ich dieses ändern, falls er ein anderes verwendet?
 
Wenn du von TCP auf UDP wechseln möchtest, musst du udp:// davor schreiben wie zB:

PHP:
fsockopen("udp://127.0.0.1",

mfg

bo
 
Shit....

Kannst jetzt wohl auch schwer erkennen, ob ich wo im code einen fehler habe, oder?

Den hat bergonline doch schon gepostet ;)

Falls da wirklich ein Fehler auftritt, bekommst du nicht die Fehlermeldung, sondern nur "$errstr ($errno)" zu sehen. Der gleiche Fehler auch bei "$out .= "GET /$getreq HTTP/1.1\r\n";"

So im allgemeinen fällt mir noch auf: Was für Daten holst du da überhaupt per fgets? Das kann doch nur die Startseite des Servers (Homepage) sein
 
Zuletzt bearbeitet:
Zurück