HTTP GET Request auf fritzbox

noreux

Neuer User
Mitglied seit
8 Jun 2008
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo,
Mit Folgendem POST Request logge ich mich auf meine Fritzbox ein:

PHP:
$fp = fsockopen(ssl://meinefritzbox.de, 443);
  fputs($fp, "POST /cgi-bin/webcm HTTP/1.1\r\n");
  fputs($fp, "Host: ssl://meinefritzbox.de\r\n");
  fputs($fp, "Authorization: Basic AUTHKEY\r\n"); //nur bei HTTPS Verbindung nötig
  fputs($fp, "Referer: $referer\r\n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp, "Content-length: ". strlen("login:command/password=PWD") ."\r\n");
  fputs($fp, "Connection: close\r\n\r\n");
  fputs($fp, "login:command/password=PWD");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  fclose($fp);


Anstelle der Login-Befehlszeile kann ich jetzt auch wunderbar Einstellungen der Box verändern. Jetzt möchte ich aber den Einzelverbindungsnachweis automatisiert herunterladen, hierfür brauche ich einen GET Request mit dem Befehl getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv

Kann mir jemand erklären wie der GET Request aussehen muss, dass er diese csv Datei lokal speichert? Finde im Internet leider nichts passendes.

mfg
Noreux
 
Habe es jetzt mal folgendermaßen probiert:

PHP:
  $fp = fsockopen(ssl://meinefritzbox.de, 443);
  fputs($fp, "GET /cgi-bin/webcm HTTP/1.1\r\n");
  fputs($fp, "Host: ssl://meinefritzbox.de\r\n");
  fputs($fp, "Authorization: Basic AUTHKEY\r\n");
  fputs($fp, "Referer: http://fritz.box/cgi-bin/webcm\r\n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp, "Content-length: ". strlen("getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv") ."\r\n");
  fputs($fp, "Connection: close\r\n\r\n");
  fputs($fp, "getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  fclose($fp);

Wenn ich mir die $res ausgebe, sagt er auch:
HTTP/1.0 200 OK Cache-Control: no-cache Content-type: text/html Expires: -1 Pragma: no-cache

Aber wie ich jetzt an den Inhalt der CSV komme, weiß ich immer noch nicht Oo
 
Warum loggst du nicht einfach den Traffic während du es im Browser herunterlädst?
 
Habe mal den "Live http headers" firefox plugin getestet, der zeigt mir diesen header an:

Code:
GET https://www.domain.de/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv 
Host: www.domain.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: page=enhsettings; menu=enhsettings; page=enhsettings; menu=enhsettings
Authorization: Basic AUTHKEY

Wenn ich diesen Request direkt im Firefox anstoße, zeigt er mir den Standart Downloaddialog und ich kann die File zB auf den Desktop speichern. Das soll das php script ja von alleine machen, also direkt die angeforderte File irgendwo speichern.
 
Zuletzt bearbeitet:
Wenn ich mir die $res ausgebe, sagt er auch:
HTTP/1.0 200 OK Cache-Control: no-cache Content-type: text/html Expires: -1 Pragma: no-cache

Ich gehe mal davon aus, daß das "auch" oben bedeutet, daß der Header nicht das einzige ist, sondern daß auch der richtige Inhalt kommt, und der Header ist davor.

Hast Du Dir das Ganze denn schon mal angeschaut? Die Antwort ist genau so aufgebaut wie der Request, und den hast Du doch schon erstellt. Oder ist der nur irgendwo abgeschrieben? Jedenfalls ist der Header vom Inhalt durch eine leere Zeile getrennt, genau wie beim Request.
 
Hallo,

Habe es jetzt mal folgendermaßen probiert:

PHP:
  $fp = fsockopen(ssl://meinefritzbox.de, 443);
  fputs($fp, "GET /cgi-bin/webcm HTTP/1.1\r\n");
  fputs($fp, "Host: ssl://meinefritzbox.de\r\n");
  fputs($fp, "Authorization: Basic AUTHKEY\r\n");
  fputs($fp, "Referer: http://fritz.box/cgi-bin/webcm\r\n");
  fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
  fputs($fp, "Content-length: ". strlen("getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv") ."\r\n");
  fputs($fp, "Connection: close\r\n\r\n");
  fputs($fp, "getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv");
  while(!feof($fp)) {
      $res .= fgets($fp, 128);
  }
  fclose($fp);

Oo

Ich denke, Dein Fehler ist, dass Du in Deinem GET-Request Header-Felder hast, die nur in einem POST-Request vorkommen dürfen.

"Content-type: application/x-www-form-urlencoded" hat in einem GET-Request nichts verloren, auch "Content-length" gehört nicht in einen GET-Request, weil ein GET-Request keinen Content hat, sondern nur einen Header. Du muss die Request-Parameter direkt an die erste Header-Zeile hängen, also etwas so:

Code:
  fputs($fp, "GET /cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv HTTP/1.1\r\n");

Ich hab's nicht getestet, kann sein, dass da Flüchtigkeitsfehler drin sind.

Viele Grüße
signaltonoise
 
Hallo noreux,

noch eine Kleinigkeit: Ich würde empfehlen php_curl zu benutzen, weil es viel einfacher zu nutzen ist zum Generieren von HTTP-Requests als fsockopen/fputs. In meinem oben genannten Tool Yaphobia setze ich auch alle Requests über php_curl ab.

Viele Grüße
signaltonoise
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.