Login über Post und Datenimport

Hallo,

ich versuche mit einem PHP Script meine Anrufliste (CSV-Datei) von
meiner Fritzbox zu lesen. Das funktioniert zwar in Teilen auch. Ich
bekomme die Daten und kann sie verarbeiten. Das Problem ist nun, dass
ich nie den aktuellen Datenstand bekomme, sondern den, den ich
sehen konnte, nachdem ich mich das letzte Mal über den Browser
angemeldet habe. Ich habe folgenden Code:
$lcURL =
"http://".$this->_mcFritz."/cgi-bin/webcm?getpage=../html/de /FRITZ!Box_Anrufliste.csv";
$lcParam

= "login:command/password=".$this->_mcPassword;

$fp = [at] fsockopen(FRITZ_ADDR, 80);
if ($fp == NULL) {
$this->_mcError = "Verbindung Fehlgeschlagen zu ".FRITZ_ADDR;
return false;
}

[at] fputs($fp, "POST /cgi-bin/webcm HTTP/1.1\r\n");
[at] fputs($fp, "Host: ".FRITZ_ADDR."\r\n");
[at] fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
[at] fputs($fp, "Content-length: ". strlen($lcParam) ."\r\n");
[at] fputs($fp, "Connection: close\r\n\r\n");
[at] fputs($fp, $lcParam);

$lcRes = NULL;
while(!feof($fp))
$lcRes .= fgets($fp, 128);
[at] fclose($fp);

//Prüfung der HTTP Meldung
if (strpos(strtoupper($lcRes), "OK") === false) {
$this->_mcError = "Meldung des Loginvorgangs: ".$lcRes;
return false;
}


//CSV Daten aus der Fritzbox holen und prüfen, ob CSV Daten
zurückgekommen ist
$this->_maCSV = file($lcURL);
if (count($this->_maCSV) == 0) {
$this->_mcError = "keine Daten erhalten, z.B. Verbindungsabbruch
oder fehlerhafter Programmaufruf";
return false;
}

Ich habe das Gefühl, dass der Login irgendwie nicht richtig
funktioniert bzw. ich dann nicht in der gleichen Session bin.
Hat jemand eine Idee?

Danke für die Hilfe

Phil
Philipp Kraus [ Fr, 03 August 2007 11:02 ] [ ID #1786375 ]

Re: Login über Post und Datenimport

Philipp Kraus wrote:

> ich versuche mit einem PHP Script meine Anrufliste (CSV-Datei) von
> meiner Fritzbox zu lesen. Das funktioniert zwar in Teilen auch. Ich
> bekomme die Daten und kann sie verarbeiten. Das Problem ist nun, dass
> ich nie den aktuellen Datenstand bekomme, sondern den, den ich
> sehen konnte, nachdem ich mich das letzte Mal über den Browser
> angemeldet habe.

Und wer regelt welche Daten Du bekommst? Wahrscheinlich die Fritzbox.
Wie kommst Du denn ohne Deine Abfrage an aktuellere Daten?

> Ich habe das Gefühl, dass der Login irgendwie nicht richtig funktioniert

Das wird dir hier keiner beantworten können. Das ist spezifisch für das
Gerät.

Obs mit Session(-Cookies) arbeitet mußt Du schon selbst rausfinden.
(Cookies deaktivieren, Get-Parameter weglassen usw.) Am besten mit der
Firefox-Erweiterung Live-HTTP-Headers oder sonstigen Tools an der
Kommunikation lauschen.

Wenn Du Cookies dazu brauchst must halt ne Erweiterung nutzen die damit
umgehen kann (z.B. curl)

MfG, Ulf
Ulf Kadner [ Fr, 03 August 2007 11:28 ] [ ID #1786376 ]

Re: Login über Post und Datenimport

Philipp Kraus schrieb:
> Hallo,
>
> ich versuche mit einem PHP Script meine Anrufliste (CSV-Datei) von
> meiner Fritzbox zu lesen. Das funktioniert zwar in Teilen auch. Ich
> bekomme die Daten und kann sie verarbeiten. Das Problem ist nun, dass
> ich nie den aktuellen Datenstand bekomme, sondern den, den ich
> sehen konnte, nachdem ich mich das letzte Mal über den Browser
> angemeldet habe. Ich habe folgenden Code:
> $lcURL =
> "http://".$this->_mcFritz."/cgi-bin/webcm?getpage=../html/de /FRITZ!Box_Anrufliste.csv";

einfach:

http://username:password [at] fritzip/cgi-bin/webcm?getpage=../ht ml/de/FRITZ!Box_Anrufliste.csv

dann sollte es auch mit der anmeldung klappen:-)

>
> $lcParam
> = "login:command/password=".$this->_mcPassword;
>
> $fp = [at] fsockopen(FRITZ_ADDR, 80);
> if ($fp == NULL) {
> $this->_mcError = "Verbindung Fehlgeschlagen zu ".FRITZ_ADDR;
> return false;
> }
>
> [at] fputs($fp, "POST /cgi-bin/webcm HTTP/1.1\r\n");
> [at] fputs($fp, "Host: ".FRITZ_ADDR."\r\n");
> [at] fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
> [at] fputs($fp, "Content-length: ". strlen($lcParam) ."\r\n");
> [at] fputs($fp, "Connection: close\r\n\r\n");
> [at] fputs($fp, $lcParam);
>
> $lcRes = NULL;
> while(!feof($fp))
> $lcRes .= fgets($fp, 128);
> [at] fclose($fp);
>
> //Prüfung der HTTP Meldung
> if (strpos(strtoupper($lcRes), "OK") === false) {
> $this->_mcError = "Meldung des Loginvorgangs: ".$lcRes;
> return false;
> }
>
>
> //CSV Daten aus der Fritzbox holen und prüfen, ob CSV Daten
> zurückgekommen ist
> $this->_maCSV = file($lcURL);
> if (count($this->_maCSV) == 0) {
> $this->_mcError = "keine Daten erhalten, z.B.
> Verbindungsabbruch oder fehlerhafter Programmaufruf";
> return false;
> }
>
> Ich habe das Gefühl, dass der Login irgendwie nicht richtig funktioniert
> bzw. ich dann nicht in der gleichen Session bin.
> Hat jemand eine Idee?
>
> Danke für die Hilfe
>
> Phil
>
Stefan Braumeister [ Fr, 03 August 2007 12:08 ] [ ID #1786380 ]

Re: Login über Post und Datenimport

Stefan Braumeister schrieb:
> Philipp Kraus schrieb:
>> Hallo,
>>
>> ich versuche mit einem PHP Script meine Anrufliste (CSV-Datei) von
>> meiner Fritzbox zu lesen. Das funktioniert zwar in Teilen auch. Ich
>> bekomme die Daten und kann sie verarbeiten. Das Problem ist nun, dass
>> ich nie den aktuellen Datenstand bekomme, sondern den, den ich
>> sehen konnte, nachdem ich mich das letzte Mal über den Browser
>> angemeldet habe. Ich habe folgenden Code:
>> $lcURL =
>> "http://".$this->_mcFritz."/cgi-bin/webcm?getpage=../html/de /FRITZ!Box_Anrufliste.csv";
>
> einfach:
>
> http://username:password [at] fritzip/cgi-bin/webcm?getpage=../ht ml/de/FRITZ!Box_Anrufliste.csv
>
> dann sollte es auch mit der anmeldung klappen:-)

Ah das war jetzt aber Bockmist, mit nem Browserelement klappt das aber
wohl nicht mit fputs:-)
>
>> $lcParam
>> = "login:command/password=".$this->_mcPassword;
>>
>> $fp = [at] fsockopen(FRITZ_ADDR, 80);
>> if ($fp == NULL) {
>> $this->_mcError = "Verbindung Fehlgeschlagen zu ".FRITZ_ADDR;
>> return false;
>> }
>>
>> [at] fputs($fp, "POST /cgi-bin/webcm HTTP/1.1\r\n");
>> [at] fputs($fp, "Host: ".FRITZ_ADDR."\r\n");
>> [at] fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
>> [at] fputs($fp, "Content-length: ". strlen($lcParam) ."\r\n");
>> [at] fputs($fp, "Connection: close\r\n\r\n");
>> [at] fputs($fp, $lcParam);
>>
>> $lcRes = NULL;
>> while(!feof($fp))
>> $lcRes .= fgets($fp, 128);
>> [at] fclose($fp);
>>
>> //Prüfung der HTTP Meldung
>> if (strpos(strtoupper($lcRes), "OK") === false) {
>> $this->_mcError = "Meldung des Loginvorgangs: ".$lcRes;
>> return false;
>> }
>>
>>
>> //CSV Daten aus der Fritzbox holen und prüfen, ob CSV Daten
>> zurückgekommen ist
>> $this->_maCSV = file($lcURL);
>> if (count($this->_maCSV) == 0) {
>> $this->_mcError = "keine Daten erhalten, z.B.
>> Verbindungsabbruch oder fehlerhafter Programmaufruf";
>> return false;
>> }
>>
>> Ich habe das Gefühl, dass der Login irgendwie nicht richtig funktioniert
>> bzw. ich dann nicht in der gleichen Session bin.
>> Hat jemand eine Idee?
>>
>> Danke für die Hilfe
>>
>> Phil
>>
Stefan Braumeister [ Fr, 03 August 2007 12:12 ] [ ID #1786381 ]

Re: Login über Post und Datenimport

Stefan Braumeister wrote:
> allerhand unnötiges...

Könntest Du bitte Deinen ständig schlechten Quoting-Stil ändern?
Damit meine ich den sinnlosen Rattenschwanz den Du jedesmal mitpostest.
Danke!

MfG, Ulf
Ulf Kadner [ Fr, 03 August 2007 13:14 ] [ ID #1786384 ]

Re: Login über Post und Datenimport

Philipp Kraus wrote:
> Hallo,
>
> ich versuche mit einem PHP Script meine Anrufliste (CSV-Datei) von
> meiner Fritzbox zu lesen. Das funktioniert zwar in Teilen auch. Ich
> bekomme die Daten und kann sie verarbeiten. Das Problem ist nun, dass
> ich nie den aktuellen Datenstand bekomme, sondern den, den ich
> sehen konnte, nachdem ich mich das letzte Mal über den Browser
> angemeldet habe. Ich habe folgenden Code:
> $lcURL =
> "http://".$this->_mcFritz."/cgi-bin/webcm?getpage=../html/de /FRITZ!Box_Anrufliste.csv";
>
> $lcParam
> = "login:command/password=".$this->_mcPassword;
>
> $fp = [at] fsockopen(FRITZ_ADDR, 80);
> if ($fp == NULL) {
> $this->_mcError = "Verbindung Fehlgeschlagen zu ".FRITZ_ADDR;
> return false;
> }
>
> [at] fputs($fp, "POST /cgi-bin/webcm HTTP/1.1\r\n");
> [at] fputs($fp, "Host: ".FRITZ_ADDR."\r\n");
> [at] fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
> [at] fputs($fp, "Content-length: ". strlen($lcParam) ."\r\n");
> [at] fputs($fp, "Connection: close\r\n\r\n");
> [at] fputs($fp, $lcParam);
-------------------------| ???

Was soll das da werden? Wenn deine Fritzbox WWW-Auth benutzt dann
mustdein Script einen Authorization Header senden. Genau das was dein
Browser auch tut. Was dein Browser tut zeigt dir ein HTTP Sniffer oder
im Falle von Mozilla/Forefox die LiveHeader Extension. Sowas gibts fuer
IE auch.

Genau erklaert wird es dann in RFC 2617 [1].

fputs($fp, 'Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==');

Das ist dann Name:Pass und als Base64 encoded.

[fuel]:/ $ php -r 'echo base64_decode("QWxhZGRpbjpvcGVuIHNlc2FtZQ==");'
Aladdin:open sesame


[1] http://www.ietf.org/rfc/rfc2617.txt

Gruss
Joerg
Joerg Behrens [ Sa, 04 August 2007 11:15 ] [ ID #1786988 ]

Re: Login überPost und Datenimport

Philipp Kraus schrieb:
> Das Problem ist nun, dass ich nie den aktuellen Datenstand bekomme,
> sondern den, den ich sehen konnte, nachdem ich mich das letzte Mal über
> den Browser angemeldet habe.

Erster gedanke: Im Webinterface läuft ein Javascript, das den
Aktualisierungsvorgang anstößt.

--
Blubb
Dirk Sohler [ Sa, 04 August 2007 11:57 ] [ ID #1786989 ]

Re: Login über Post und Datenimport

Philipp Kraus wrote:

> [Code]

hast du schonmal danach gegoogelt?

Diese Seite brachte es bei mir zutage und dieser Seite entnehme ich, dass
andere dieses Problem schon gelöst haben.

http://www.ip-phone-forum.de/archive/index.php/t-102676.html

Grüße
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.
Johannes Mueller [ Sa, 04 August 2007 12:13 ] [ ID #1786990 ]

Re: Login über Post und Datenimport

Joerg Behrens wrote:

> Was soll das da werden? Wenn deine Fritzbox WWW-Auth benutzt dann
> muss dein Script einen Authorization Header senden.

Mal eine alte FritzBox ausgegraben. Es wird keine WWW-Auth verwendet,
allerdings auch keine Cookies. Merkt sie sich fuer einen bestimmten
Zeitraum die Client IP/Browserkennung?

Gruss
Joerg
Joerg Behrens [ Sa, 04 August 2007 12:33 ] [ ID #1786991 ]

Re: Login über Post und Datenimport

Hallo,

On 2007-08-04 12:13:38 +0200, "Johannes Mueller" <johannes_m [at] gmx.net> said:

> Diese Seite brachte es bei mir zutage und dieser Seite entnehme ich,
> dass andere dieses Problem schon gelöst haben.
>
> http://www.ip-phone-forum.de/archive/index.php/t-102676.html

ich hatte diese Seite schon gefunden, aber leider klappt der Tip mit
dem
http://Passwort [at] mustermann.dyndns.org:Port/cgi-bin/webcm?get page=../html/de/FRITZ!Box_Anrufliste.csv

leider

nicht. Das Passwort entspricht ja hier dem Benutzernamen. Egal wie ich
das Passwort mit gebe, ich bleibe beim Login hängen. Deswegen ja die
Überlegung mit dem Post, d.h. ich rufe die "Loginseite" auf und gebe
dort das Passwort mit.

Danke

Phil
Philipp Kraus [ Sa, 04 August 2007 13:41 ] [ ID #1786992 ]

Re: Login über Post und Datenimport

Hallo,

On 2007-08-04 12:33:26 +0200, Joerg Behrens <behrens [at] takenet.de> said:

> Mal eine alte FritzBox ausgegraben. Es wird keine WWW-Auth verwendet,
> allerdings auch keine Cookies. Merkt sie sich fuer einen bestimmten
> Zeitraum die Client IP/Browserkennung?

Ich schätze die IP. Denn ich habe folgendes getest, logge ich mich per
Browser vom gleichen PC ein, auf dem auch mein Script läuft, wunderbar
das Script erhält die Daten. Mache ich das aber nicht, erhalte ich
immer die Daten von dem vorhergehenden Login.
Logge ich mich von einem anderen PC ein, dann klappt das mit dem Script
auch nicht.

THX

Phil
Philipp Kraus [ Sa, 04 August 2007 13:44 ] [ ID #1786993 ]
PHP » de.comp.lang.php.misc » Login über Post und Datenimport

Vorheriges Thema: Header ändern mit PHP
Nächstes Thema: SOAP serverseitige Validierung gegen WSDL