.titleBar { margin-bottom: 5px!important; }

HTTP GET Request auf fritzbox

Dieses Thema im Forum "FRITZ!Box Fon: DSL, Internet und Netzwerk" wurde erstellt von noreux, 11 Nov. 2008.

  1. noreux

    noreux Neuer User

    Registriert seit:
    8 Juni 2008
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    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($fp128);
      }
      
    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
     
  2. noreux

    noreux Neuer User

    Registriert seit:
    8 Juni 2008
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    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($fp128);
      }
      
    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
     
  3. Chatty

    Chatty Aktives Mitglied

    Registriert seit:
    13 März 2006
    Beiträge:
    1,667
    Zustimmungen:
    20
    Punkte für Erfolge:
    38
    Warum loggst du nicht einfach den Traffic während du es im Browser herunterlädst?
     
  4. noreux

    noreux Neuer User

    Registriert seit:
    8 Juni 2008
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #4 noreux, 11 Nov. 2008
    Zuletzt bearbeitet: 11 Nov. 2008
    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.
     
  5. signaltonoise

    signaltonoise Neuer User

    Registriert seit:
    3 Dez. 2007
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  6. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    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.
     
  7. signaltonoise

    signaltonoise Neuer User

    Registriert seit:
    3 Dez. 2007
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo,

    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
     
  8. signaltonoise

    signaltonoise Neuer User

    Registriert seit:
    3 Dez. 2007
    Beiträge:
    44
    Zustimmungen:
    0
    Punkte für Erfolge:
    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