Hallo Leute,
ich möchte folgende Webseite http://85.178.122.5/ auslesen und in eine
Textdatei schreiben. Das Problem ist, der Server ist hinter dem Router
(Fritzbox) und fopen funzt hier nicht :-( .
Mit fsockopen('http://85.178.122.5/';, 80, $errno, $error, 5); bekomme
ich auch ein false.
Wie würdet Ihr das lösen? Ich komme mehr aus dem C Bereich und bin in
der Netzwerkgeschichte noch recht frisch.
Bin für alles mehr als dankbar.
Wünsche noch einen schönen Sonntag.
Moment, von wo aus möchtest du das überhaupt machen?
Ich kann die Seite mit einem normalen Browser garnicht öffnen!
-> Timeout!
Also könnte ich zB auch gar kein Script schreiben, das das tut!
Versuchst du das daheim in einem privaten Netz? Wie kommst du dann zu
der IP Adresse?
Hi Leute,
danke erst einmal für eure Zeit.
Ich habe ein Webserver in meinem Netzwerk der mir die Temperatur zb auf
einer HTML Seite liefert. Über Port Forwarding kann ich jederzeit über
wetterstation.mine.nu mir meine Daten anzeigen lassen (außer ich mache
den Router aus oder Dyn funktioniert mal wieder nicht richtig)
Nun zu meinem Problem:
Ich hatte mir folgendes überlegt zum testen und fgets schreibt nichts in
die Datei.
$datei = "test.txt";
$filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno,
$error);
if(!filestream){
echo "Fehler: $errno";
echo "Fehlerbeschreibung: $error";
}
else echo "IP geöffnet!";
$filestream = fopen("http://wetterstation.mine.nu/","r");
if(!$filestream) echo "Fehler beim öffnen!<br>";
else echo "Webseite geöffnet!<br>";
while(!feof($filestream)) {
$resultat = fgets($filestream);
$a = fopen($datei,"a");
fwrite($a,$resultat);
}
fclose($a);
fclose($filestream);
$groesse = filesize("$datei");
if($groesse==0) echo "Es wurde nix in $datei gespeichert!";
else echo "Es wurden $groesse Bytes in $datei gespeichert!";
Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am
Router und man muss wohl so sich "als Browser" ausgeben
fp = fsockopen("http://wetterstation.mine.nu/", 80, &$errno, &$errstr,
30);
if ($fp)
{
fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n");
while (!feof($fp))
{
$reply = fgets($fp);
}
fclose($fp);
}
echo $reply;
Aber warum steht nichts in reply drin??????? Habe ich bei der
Browseranfrage Fehler gemacht? Habe auch von socket_set_blocking gelesen
hat das was damit zu tun?
Vielen Dank!
du must dem server schon sagen, dass du die daten haben willst.. sonst
bekommst auch nix.. daher das GET.. aber der passt irgendqwie nicht
ganz...
"GET ".wetterstation.mine.nu." HTTP/1.0\n\n"
sollte doch
"GET / HTTP/1.0\n\n"
sein oder seh ich da was falsch??
naja auf jedenfall gibts da doch eine funktion die dir das direkt machen
kann...
http_get
schau doch einfach mal unter den http-functions auf php.net nach...
http://at.php.net/manual/de/ref.http.php
73
Hallo,
fsockopen() ist eine Funktion auf ziemlich tiefer Ebene - Die kann sowas
wie http:// nicht interpretieren. Du musst den Hostname oder die
IP-Adresse direkt übergeben, zum Beispiel so:
fsockopen("mikrocontroller.net", ...);
Wohin sie sich in deiner Version verbindet, weiß ich nicht.
Gruß,
Folke
Hi Leute,
danke erst einmal für Eure Zeit und Euer Verständnis.
Aber vielleicht habe ich mich unklar ausgedrückt und möchte mein Problem
nochmal präzise ausdrücken:
Ich habe einen Mikrocontroller (MSP430) und einen Lancontroller (der mir
eine HTML Seite generiert (ich habe ihm vorher meine C Daten
übergeben)).
Beide sind auf einem Entwicklungsboard
(http://www.olimex.com/dev/msp-easyweb3.html) verbaut.
Das Board verfügt über einen TCP Stack und ist über eine IP ansprechbar.
Wenn ich nun im LAN diese IP über meinen Browser aufrufe erscheint die
Webseite.
Nun habe ich in meiner FritzBox das Portforwarding oder Portfreigabe
aktiviert, damit meine ich alle Anfragen von außen auf mein aktuelle IP
bzw. auf wetterstation.mine.nu (habe ich mir dyndns.org eingerichtet)
werden über Port80 an Port80 weitergeleitet und an die Interne IP
192.168.xx.xx von meinem Board gesendet und man kann sich die HTML Seite
anschauen.
Nun möchte ich die Daten von dieser Seite auslesen und auf einem
Richtigen Server meiner UNI speichern. Das auslesen (parsen) einer HTML
Seite ist so kein Problem gewesen (zb eine Testseite auf dem Server der
UNI usw.) Leider funktioniert die Variante hier nicht (mit fopen)
Nun zu meinem aktuellen Problem:
Ich hatte mir folgendes überlegt zum testen aber fgets schreibt nichts
in
die Datei.
$datei = "test.txt";
$filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno,
$error);
if(!filestream){
echo "Fehler: $errno";
echo "Fehlerbeschreibung: $error";
}
else echo "IP geöffnet!";
$filestream = fopen("http://wetterstation.mine.nu/","r");
if(!$filestream) echo "Fehler beim öffnen!<br>";
else echo "Webseite geöffnet!<br>";
while(!feof($filestream)) {
$resultat = fgets($filestream);
$a = fopen($datei,"a");
fwrite($a,$resultat);
}
fclose($a);
fclose($filestream);
$groesse = filesize("$datei");
if($groesse==0) echo "Es wurde nix in $datei gespeichert!";
else echo "Es wurden $groesse Bytes in $datei gespeichert!";
Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am
Router und man muss wohl so sich "als Browser" ausgeben
fp = fsockopen("wetterstation.mine.nu", 80, &$errno, &$errstr,
30);
if ($fp)
{
fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n");
while (!feof($fp))
{
$reply = fgets($fp);
}
fclose($fp);
}
echo $reply;
Aber warum steht nichts in $reply drin, das ist doch unlogisch, oder?
Wo liegt den das Problem? Wie würde ein Profi die Geschichte lösen?
Wichtig ist auch ich kann mit dem Board nichts senden oder als Datei
speichern, nur ein HTML Seite generieren und muss diese auslesen.
Also Danke noch mal an alle die mir helfen wollen.
Vielen Dank!
das hat nix mit deinem router zu tun!!!
tuts per normalen browser? wenn ja ists nicht der router!
> Da ich Neuling in PHP bin habe ich dan recherchiert und es liegt wohl am> Router und man muss wohl so sich "als Browser" ausgeben>> fp = fsockopen("wetterstation.mine.nu", 80, &$errno, &$errstr,> 30);> if ($fp)> {> fputs($fp, "GET ".wetterstation.mine.nu." HTTP/1.0\n\n");
der GET kann so nicht passen! mach wie oben beschrieben einen http_get
das tut genau das was du willst!
73
Hallo Leute,
leider hat bishetzt noch nichts den gewünschten Erfolg gehabt, ich habe
jetzt unter http://85.178.80.78/ einfach eine HTML Seite die ich
generiere. Ich habe alle Spielereien weggelassen und gebe reinen Text
aus.
Die CURL Extension hatte da auch nicht mehr Erfolg :-( (wurde mir unter
http://selfphp.de/forum/showthread.php?t=15782&page=3 empfohlen)
Wer hat noch ein Idee? Warum sollte ich eine Seite nicht parsen können
wenn ich Sie aber öffnen kann?
Hier der aktuelle PHP Code und er öffnet auch die IP!
<?php
unlink("test.txt");
$datei = "test.txt";
$filestream = fsockopen("http://wetterstation.mine.nu/", 80, $errno,
$error);
if(!filestream){
echo "Fehler: $errno";
echo "Fehlerbeschreibung: $error";
}
else echo "IP geöffnet!";
fputs($filestream, "GET / HTTP/1.0\r\n\r\n");
while(!feof($filestream)) {
echo fgets($filestream);
/* $resultat = fgets($filestream);
$a = fopen($datei,"a");
fwrite($a,$resultat); */
}
//fclose($a);
fclose($filestream);
?>
Vielen Dank an Euch für Eure Hilfe.
PS: Falls die IP nicht mehr erreichbar ist hat sich mein Board
(EaysyWeb3) aufgehangen.
C:\Dokumente und Einstellungen\Feadi\Desktop>c:\php5\php.exe huhu.php
IP ge÷ffnet!<html>
<head>
<title>Daten Wetterstation</title>
</head>
<body>
Versorgungsspannung in Volt * 100:
<br>Chiptemperatur in Grad * 10:
</body>
</html>
Das hier ist die Ausgabe bei mir.
Sorry das hatte ich schon geändert, bin nur in der Datei verrutscht :-(
.
Aber es geht bei mir immer noch nicht. Wenn es bei Dir geht, denn kann
doch nur der Server auf dem das Script liegt, schuld sein!
Ich komme nur die Ausgabe "IP geöffnet!".
Dabb nuss ich mich mal an den Admin wenden.
Danke an alle die mir geholfen haben.