Webwolf: URL request im hintergrund öffnen (socks?)

Nabend.

Ich versuche gerade eine Weiterleitung für meine DynDNS zu schreiben.

Das heißt ich versuche die IP-Adresse von meiner FritzBox (Router) an meinen Server (www.beispiel.de) und sie dann von dort weiter an www.dyndns.org zu senden.

Ersteres funktioniert super: Sobald der Router eine neue IP zugewiesen bekommt, landet die IP in meiner Datenbank und kann weiter verarbeitet werden.

Bsp.-URL, die vom Router aufgerufen wird:
http://beispiel.de/dyndns/index.php?username=<username>&password=<pass>&hostname=<domain>&ip=<ipaddr>

Für eine Aktualisierung bei dynDNS.org steht ebenfalls eine URL zur Verfügung:
http://username:password@members.dyndns.org/nic/update?hostname=yourhostname&myip=ipaddress&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG

Nun komm ich mit meinem PHP-Code und versuche die zweite URL im Hintergrund zu öffnen, sobald die erste URL aufgerufen wird.

Das sieht bei mir derzeit so aus:

if(isset($_GET['username'],$_GET['password'],$_GET['hostname'],$_GET['ip'])){  
	$sql = "INSERT INTO ".MYSQL_PREFIX."dns_home  
				(ip,  
				 time)  
			VALUES  
				('".$_GET['ip']."',  
				 NOW())  
		";  
	mysql_query($sql) OR die(mysql_error());  
	  
	  
	file('http://'.$_GET['username'].':'.$_GET['password'].'@members.dyndns.org/nic/update?hostname='.$_GET['hostname'].'&myip='.$_GET['ip'].'&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG');  
 } 

Hier versuche ich die URL mit der Funktion file(); anzusprechen.
Das ganze schein nicht so zu funktionieren, wie ich mir es vorgestellt habe =)
Fehlercode:
Warning: file(http://...@members.dyndns.org/nic/update?hostname=<domain>&myip=<ipaddr>&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /var/www/vhosts/beispiel.de/httpdocs/dyndns/index.php on line 28

Frage ist nun, wie rufe ich die URL von dynDNS.org im Hintergrund auf?
Ein Kollege behauptet, ich müsste hier mit SOCKS arbeiten.

Kann jemand helfen? Ich wäre sehr dankbar.

  1. Hello,

    Warning: file(http://...@members.dyndns.org/nic/update?hostname=<domain>&myip=<ipaddr>&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG) [function.file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /var/www/vhosts/beispiel.de/httpdocs/dyndns/index.php on line 28

    Antwortstatus ist: 403 Forbidden

    Frage ist nun, wie rufe ich die URL von dynDNS.org im Hintergrund auf?
    Ein Kollege behauptet, ich müsste hier mit SOCKS arbeiten.

    Da hat er Recht. fsockopen() und das Paar Username:Passwort (vorher packen) mitsenden.

    Guckst Du http://community.de.selfhtml.org/my/zitatesammlung/zitat2114

    Da wird es soooo schön erklärt :-))

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hallo,

    Das heißt ich versuche die IP-Adresse von meiner FritzBox (Router) an meinen Server (www.beispiel.de) und sie dann von dort weiter an www.dyndns.org zu senden.

    bitte verwende für Beispiele die dafür vorgesehenen Domainnamen gemäß RFC2606.

    [...]

    Für eine Aktualisierung bei dynDNS.org steht ebenfalls eine URL zur Verfügung:
    http://username:password@members.dyndns.org/nic/update?hostname=yourhostname&myip=ipaddress&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG

    für Web-Browser und Utility-Programme wie z.B. curl.

    file('http://'.$_GET['username'].':'.$_GET['password'].'@members.dyndns.org/nic/update?hostname='.$_GET['hostname'].'&myip='.$_GET['ip'].'&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG');
    } [/code]
    Hier versuche ich die URL mit der Funktion file(); anzusprechen.

    Das ist der erste Fehler. Der zweite ist der, dass Du annimmst, Dein PHP-Script fiele in die Kategorie, die diese URL benutzen kann.

    Frage ist nun, wie rufe ich die URL von dynDNS.org im Hintergrund auf?
    Ein Kollege behauptet, ich müsste hier mit SOCKS arbeiten.

    Nö. Aber vermutlich verwechselst Du ebenso wie Tom fsockopen() mit dem SOCKS-Protokoll.

    Möglichkeiten:

    1. cURL verwenden
    die von Dir angegebene URL verwenden und deswegen PHPs cURL-Bibliothek nutzen.

    2. fsockopen und andere URL verwenden
    Mit fsockopen einen rohen http-Request absetzen und deswegen die dafür vorgesehene andere URL verwenden, so wie es von dyndns dokumentiert ist.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      1. fsockopen und andere URL verwenden
        Mit fsockopen einen rohen http-Request absetzen und deswegen die dafür vorgesehene andere URL verwenden, so wie es von dyndns dokumentiert ist.

      wenn man genau hinsieht, erkennt man, dass es in beiden Fällen dieselbe URL ist.
      Der Unterschied ist nur, dass man sich bei einem "selbstgedrehten" HTTP-Request auch selbst um die Authentication-Header kümmern und einen User Agent angeben muss.

      Die Tatsache, dass der OP bei seinem Versuch mit einem 403 abgewiesen wird, lässt mich vermuten, dass dyndns gerade auf einen einigermaßen sinnvollen User Agent großen Wert legt.

      So long,
       Martin

      --
      Ordnung ist, wenn man etwas findet, was man gar nicht sucht.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(