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
 

noreux

Neuer User
Mitglied seit
8 Jun 2008
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
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
 

Chatty

Aktives Mitglied
Mitglied seit
13 Mrz 2006
Beiträge
1,685
Punkte für Reaktionen
25
Punkte
48
Warum loggst du nicht einfach den Traffic während du es im Browser herunterlädst?
 

noreux

Neuer User
Mitglied seit
8 Jun 2008
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
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:

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
0
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.
 

signaltonoise

Neuer User
Mitglied seit
3 Dez 2007
Beiträge
44
Punkte für Reaktionen
0
Punkte
0
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
 

signaltonoise

Neuer User
Mitglied seit
3 Dez 2007
Beiträge
44
Punkte für Reaktionen
0
Punkte
0
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
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,831
Beiträge
2,027,210
Mitglieder
350,918
Neuestes Mitglied
AlexGraef