Seite 1 von 2

CSV download via Network()

Verfasst: 10.06.2007 23:18
von D@nte
Auf HeX0R's Anregung hin versuch ich grad ne routine zu schreiben die für mein Progrämmchen CSV-Dateien von der Fritzbox lädt.
Das Hauptproblem ist wohl das ich mich erst anmelden muss was schon mal zu funktionieren scheint allerdings komm ich trotzdem nicht an meine CSV-Datei

Als Grundlage hatte ich folgende 2 Sources
Delphi-Code zum Auslesen der Anrufliste
Read_CSV_Data_from_Website.pb

daraus ist dann das geworden:

Code: Alles auswählen

PW.s = "das.passwort.unso"

InitNetwork()

ConnectionID = OpenNetworkConnection("fritz.box", 80)

If ConnectionID
  com$ = "POST http://fritz.box/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&errorpage=../html/index.html&var:lang=de&var:pagename=home&var:menu=home&login:command/password=" + PW + Chr(13) + Chr(10)
  Res = SendNetworkString(ConnectionID,com$)
  SendNetworkString(ConnectionID, Chr(13)+Chr(10))
  com$ = "GET http://fritz.box/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv" + Chr(13) + Chr(10)
  Res = SendNetworkString(ConnectionID,com$)
  SendNetworkString(ConnectionID, Chr(13)+Chr(10))

  Repeat
    Delay(10)
    Result = NetworkClientEvent(ConnectionID)

    Select Result

      Case 2
        Content$ = Space(5000)
        ReceiveNetworkData(ConnectionID,@Content$,5000)
        Ok = 1
        MessageRequester("Done!","Your Data" + Chr(13) + Chr(10) + Content$,0)
        CloseNetworkConnection(ConnectionID)

    EndSelect

  Until Ok = 1 
EndIf
Als Ergebnis kommt dann das raus:

Code: Alles auswählen

HTTP/1.0 400 Bad Request
Content-Length: 186
Content-Type: text/html

<HTML><HEAD><TITLE>400 Bad Request (ERR_INVALID_REQ)</TITLE></HEAD><BODY><H1>400 Bad Request</H1><BR>ERR_INVALID_REQ<HR><B>AR7 Webserver</B> Sun, 10 Jun 2007 20:43:42 GMT</BODY></HTML>
Da ich allerdings noch nie mit Network() gearbeitet hab, bin ich mir nicht sicher ob ich die richtigen Befehle verwendet hab, bzw ob ich den Delphisource überhaubt richtig übersetzt hab...

Außerdem verwirrt mich das NetworkClientEvent(ConnectionID) immer 2 oder 0 ist obwohl ich eigentlich doch ne 3 bekommen müsste weil ich ja nen file anfrage?!

Die html Zeilen funzen auch definitiv, hab se beide übern Browser benutzt und meine Datei erhalten...

Hoffe man kann mir helfen ;)

Achja mit

Code: Alles auswählen

      Case 2
        file.s = "C:\test.csv"
        page.s = "http://fritz.box/cgi-bin/webcm?getpage=../html/de/FRITZ!Box_Anrufliste.csv"
        URLDownloadToFile_(#Null,@file,@page,#Null,#Null)
hab ich's auch mal probiert, allerdings auch ohne Erfolg, bzw test.csv war dann die Anmeldeseite der FritzBox

Verfasst: 10.06.2007 23:32
von HeX0R
Wenn deine FritzBox ohne Passwort eingestellt ist, kannst du auch sowas in der Art benutzen.
Ich hab einfach den Quelltext durchwühlt.
Mit der csv sollte es noch sehr viel einfacher sein (interessant, wusste nicht wo ich die finden kann).

(Ich hab das vorhin nachdem ich den betreffenden Beitrag gelesen hatte mal ausprobiert, deswegen kann ich das jetzt "mal eben" ausm Hut zaubern ;) )

Mit Passwort sollte dann auch möglich sein, aber da verliess mich die Muse.

Code: Alles auswählen

Structure _CALL_
	Icon.l
	Date.s
	Name.s
	Number.s
	Nebenstelle.s
	OwnNumber.b
	Reserved.b
	Duration.s
EndStructure

If InitNetwork() = 0
	MessageRequester("Fehler", "Netzwerk konnte nicht initialisiert werden!", 0)
	End
EndIf

Global NewList MyCallings._CALL_()

Enumeration
	#Icon_CallIN
	#Icon_CallFailed
	#Icon_CallOUT
EndEnumeration

CatchImage(#Icon_CallIN, ?CallIN)
CatchImage(#Icon_CallOUT, ?CallOUT)
CatchImage(#Icon_CallFailed, ?CallINFailed)

Procedure.l ParseString(String.s)
	Protected i.l, j.l, a$, b$, Result.l

	For i = 1 To Len(String)
		a$ = Mid(String, i, 1)
		If a$ = Chr(34)
			j + 1
			If j % 2 = 0
				Select j
					Case 2
						;Icon
						MyCallings()\Icon = ImageID(Val(b$) - 1)
					Case 4
						;Date
						MyCallings()\Date = b$
					Case 6
						;Name
						MyCallings()\Name = b$
					Case 8
						;Number
						MyCallings()\Number = b$
					Case 10
						;Nebenstelle
						MyCallings()\Nebenstelle = "Fon" + Str(Val(b$) + 1)
					Case 12
						;OwnNumber
						MyCallings()\OwnNumber = Val(b$)
					Case 14
						;Reserverd
						MyCallings()\Reserved = Val(b$)
					Case 16
						;Duration
						MyCallings()\Duration = b$
						Result = i + 1
						Break
				EndSelect
				b$ = ""
			EndIf
		ElseIf j % 2
			b$ + a$
		EndIf
	Next i

	ProcedureReturn Result
EndProcedure

Procedure Main()
	Protected URL.s, Path.s, Send.s, Receive.s, a$
	Protected Port.l, CID.l, Wait.l, TimeOUT.l, Callings.l, i.l, Pos.l

	URL  = "fritz.box"
	Path = "/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181502063%2C-120&var%3Ashowsetup=&var%3Ashowall=&logger%3Asettings%2Ffilter=2"
	Port = 80
	CID  = OpenNetworkConnection(URL, 80)
	If CID = 0
		MessageRequester("Error", "Can't reach " + URL)
		End
	EndIf

	Send = "GET /"+ Path + "/ HTTP/1.1"          + #CRLF$
	Send + "Host: "+ URL                         + #CRLF$
	Send + "Connection: close"                   + #CRLF$
	Send + "Accept: text/plain"                  + #CRLF$
	Send + "Accept-Charset: ISO-8859-1, *;q=0.7" + #CRLF$ + #CRLF$
	SendNetworkString(CID, Send)

	*Buffer = AllocateMemory(1024)

	If OpenWindow(0, 400, 52, 400, 326, "Fritz!Box", #PB_Window_SystemMenu | #PB_Window_TitleBar) = 0 Or CreateGadgetList(WindowID(0)) = 0
		End
	EndIf
	ListIconGadget(0, 5, 5, 495, 310, "Datum", 120)
	AddGadgetColumn(0, 1, "Name / Rufnummer", 120)
	AddGadgetColumn(0, 2, "Nebenstelle", 100)
	AddGadgetColumn(0, 3, "Dauer", 50)

	TimeOUT = ElapsedMilliseconds() + 2000
	Wait    = 100
	Repeat
		Select WaitWindowEvent(Wait)
			Case 0
				If CID
					Select NetworkClientEvent(CID)
						Case #PB_NetworkEvent_Data
							Wait = 0
							L = ReceiveNetworkData(CID, *Buffer, 1024)
							If L
								Receive + PeekS(*Buffer, L)
								TimeOUT = ElapsedMilliseconds() + 2000
							EndIf
						Default
							Wait = 5
					EndSelect
				EndIf
				If CID And FindString(Receive, "</html>", 1)
					Callings = CountString(Receive, "document.write(TrCall(")
					For i = 1 To Callings
						Pos = FindString(Receive, "document.write(TrCall(", Pos) + 21
						AddElement(MyCallings())
						a$ = Right(Receive, Len(Receive) - Pos)
						Pos + ParseString(a$)
					Next i
					ForEach MyCallings()
						AddGadgetItem(0, -1, MyCallings()\Date + #LF$ + MyCallings()\Name + #LF$ + MyCallings()\Nebenstelle + #LF$ + MyCallings()\Duration, MyCallings()\Icon)
					Next
					CloseNetworkConnection(CID)
					CID = 0
					Wait = -1
				EndIf
				If TimeOUT < ElapsedMilliseconds()
					If CID
						CloseNetworkConnection(CID)
						CID = 0
					EndIf
					Wait = -1
					AddGadgetItem(0, -1, "Timeout ... FritzBox offline ?")
				EndIf
			Case #PB_Event_CloseWindow
				Break
		EndSelect
	ForEver
EndProcedure

Main()

End
DataSection
	CallIN:
	Data.l $00010000, $10100001, $00010000, $05680008, $00160000, $00280000, $00100000, $00200000
	Data.l $00010000, $00000008, $00000000, $00000000, $00000000, $01000000, $00000000, $96DB0000
	Data.l $C8CA0046, $71AF00C6, $A5C30029, $9ABB0081, $76B30071, $93B7002D, $8AB20066, $CDCD005A
	Data.l $CFCF00CD, $78A200CF, $ADC80045, $8AB1008B, $A5E4005A, $88BC005D, $8AB2004A, $D1D10059
	Data.l $C3ED00D1, $6FA00092, $C2DC0033, $B0E700A0, $5B920071, $C4ED0017, $96BC0094, $E0EE0068
	Data.l $78A500CF, $A2E30042, $A2E30056, $D0D00055, $DAF400D0, $A4E400BC, $A1E3005B, $AEE30055
	Data.l $BAC50071, $CDDD00AC, $C4C800B8, $B2D400C0, $A0DF0089, $BFEC0055, $A6E2008C, $AAE50061
	Data.l $B2E80065, $76B40074, $6CA5002D, $9BBD0029, $71AA0070, $75AF002C, $90B00030, $B1CE0069
	Data.l $78B4008D, $86A8002E, $D3E1005E, $C1DC00C1, $568E00A2, $97C20013, $84A70063, $D1EC005A
	Data.l $96B900B0, $90BB006A, $BAD1005C, $639A009E, $659A0020, $76A20023, $9EBE0040, $B7E90075
	Data.l $74B0007D, $9DBD002E, $729F0074, $749F003B, $5B91003E, $75A40019, $6F9D003B, $7DAA0037
	Data.l $B7C10046, $A4C300AB, $5991007D, $8CB20016, $81AB005C, $99DB0050, $A1DD004C, $73A1005B
	Data.l $88C8003B, $9EC1003D, $73B20074, $C8E00028, $609700AD, $98BB001C, $BDD9006E, $75B10099
	Data.l $DAF10031, $6D9C00BF, $BAD80032, $88B10094, $73AF0056, $74A4002D, $E0ED0038, $79A200D1
	Data.l $6AA20047, $C3C70026, $75A200BE, $96D7003D, $6FA8004A, $A8C4002A, $7BA80085, $80AB0043
	Data.l $AABB004A, $9ABC0095, $65980071, $5E930028, $A6E4001E, $89B1005F, $B3E80057, $A2E10074
	Data.l $99B90057, $87BC0071, $548C0049, $91D2000F, $73AE0044, $C7EE002C, $9FE20099, $CCCC0051
	Data.l $FFFF00CC, $000000FF, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $7A7A0000
	Data.l $7A7A7A7A, $19037A7A, $0862376B, $7A7A7A7A, $7A7A7A7A, $51754B03, $236C3174, $7A7A7A08
	Data.l $0F7A7A7A, $77774E2B, $0A2A7777, $7A7A7A1C, $41677A7A, $6F140D77, $605D1E1A, $7A7A7A7A
	Data.l $7705127A, $344D3A27, $7A3E0E76, $7A7A7A7A, $4F770548, $047A2F5E, $7A7A6830, $567A7A7A
	Data.l $3D707758, $7A7A7A21, $7A7A7A22, $467A7A7A, $32651B6D, $7A7A7A7A, $7A7A7A7A, $5B2C7A7A
	Data.l $78352540, $667A7A10, $01014969, $38067A78, $0A2E2826, $53427A78, $45735561, $596A7A71
	Data.l $2D1F2916, $363B7A04, $443C0000, $184A7A09, $5A72111D, $17337A7A, $43020020, $0B7A0901
	Data.l $7A5C545F, $0C7A7A7A, $02002452, $7A7A0147, $7A7A3F0B, $637A7A7A, $00574C06, $7A7A5002
	Data.l $7A7A7A7A, $397A7A7A, $13077A7A, $7A7A1564, $7A7A7A7A, $7A7A7A7A, $077A7A7A, $03FF036E
	Data.l $01FC0000, $01F80000, $03F00000, $07E00000, $8FC00000, $DF810000, $FF830000, $81010000
	Data.l $01010000, $01010000, $00030000, $80870000, $80CF0000, $B0FF0000, $F8FF0000, $00000000
	CallINFailed:
	Data.l $00010000, $10100001, $00010000, $05680008, $00160000, $00280000, $00100000, $00200000
	Data.l $00010000, $00000008, $00000000, $00000000, $00000000, $01000000, $00000000, $3A200000
	Data.l $5B310096, $502B00F4, $371E00D8, $391F0094, $391F0099, $41280098, $5333009D, $582F00C1
	Data.l $3D2200EC, $6854009D, $7B5600B1, $825F00FF, $655100FF, $4E3000B0, $988000BB, $5C4600F2
	Data.l $4A3100AC, $503500A4, $7B5E00B4, $675200E4, $795500B2, $9C8100FC, $B1A300FF, $482B00E3
	Data.l $523A00B0, $3B1F00A7, $7D59009D, $553600FF, $9A7E00C7, $866400FF, $574000FF, $4F3700A8
	Data.l $371E00A4, $BEAE008E, $4C3300F9, $4B3300A1, $3F2400A3, $6A55009F, $756200B2, $CEC400B8
	Data.l $3C2300F4, $674B009A, $D3CB00CD, $321C00F0, $57410084, $8A6900A9, $7C6400FF, $754F00D0
	Data.l $A38A00FB, $3C2100FF, $644B009D, $3C2100BF, $361E009C, $79570089, $4F3100F3, $361D00BC
	Data.l $7B580090, $3A1F00F8, $8E6F0097, $805E00FF, $B3A500FC, $462A00E6, $785200AD, $452E00FF
	Data.l $4A2D0098, $674300B4, $775300EC, $5F3D00FC, $3A2000D7, $3B20009A, $341C009B, $67530088
	Data.l $4B2E00B3, $A79400B5, $492D00ED, $3C2200AF, $6543009E, $341B00E2, $9480008B, $836000D9
	Data.l $381F00FF, $987B0093, $3A1F00FF, $AE9F009A, $AE9B00E4, $573700F4, $391E00CA, $B9A50097
	Data.l $462D00FF, $371F00A0, $7751008F, $000000FF, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $5C5C0000
	Data.l $5C5C5C5C, $3800125C, $5C5C0051, $5C5C5C5C, $5C5C5C5C, $560E0909, $5C004944, $5C5C5C5C
	Data.l $455C5C5C, $5B5B4D46, $21075B5B, $5C5C5C5C, $18345C5C, $1E505B30, $001C0B3F, $5C5C5C5C
	Data.l $5B0E4C5C, $540D2F0C, $5C292A31, $5C5C5C5C, $3C5B3732, $0D5C4033, $5C5C2417, $055C5C5C
	Data.l $121B5B41, $5C5C5C35, $5C5C5C06, $23065C5C, $5A070B39, $5C5C5C5C, $5C5C5C5C, $4F065C5C
	Data.l $5C57153B, $5C5C5C5C, $5C5C5C5C, $55485C5C, $474B0C52, $045C5C5C, $03030353, $22275C4E
	Data.l $3E432E16, $1A5C5C2C, $02020202, $28145C05, $3A361D58, $115C5C5C, $08010113, $105C5C05
	Data.l $5C203D2B, $115C5C5C, $08010113, $5C5C5C04, $5C5C101F, $195C5C5C, $420F0F4A, $5C5C5C04
	Data.l $5C5C5C5C, $595C5C5C, $2D0A0A26, $5C5C5C25, $5C5C5C5C, $5C5C5C5C, $5C5C5C5C, $0FFE5C5C
	Data.l $07FC0000, $03F80000, $03F00000, $07E00000, $8FC00000, $DF810000, $FF030000, $FF070000
	Data.l $81030000, $81010000, $81030000, $81870000, $81CF0000, $81FF0000, $FFFF0000, $00000000
	CallOUT:
	Data.l $00010000, $10100001, $00010000, $05680008, $00160000, $00280000, $00100000, $00200000
	Data.l $00010000, $00000008, $00000000, $00000000, $00000000, $01000000, $00000000, $B06E0000
	Data.l $7E0F0084, $E5910032, $C4BA00AC, $9E6200BD, $DEDE0076, $C56B00DE, $AA260088, $A63E0050
	Data.l $9D4E0060, $A75A0067, $AD680073, $8A29007E, $86230048, $A65A0043, $AC340072, $7604005B
	Data.l $C42E0028, $B375005E, $C52C008A, $D03B005D, $AB63006A, $B926007A, $D13C0055, $B725006C
	Data.l $9B460053, $841C0062, $9015003E, $8318003D, $DC6E003B, $CB400091, $AB80006D, $BE86008E
	Data.l $94430099, $7F15005D, $B06C0037, $B5760082, $9D59008A, $CB950070, $790800A6, $AE66002D
	Data.l $D9B5007C, $750200C0, $E7AC0027, $9F6300BE, $BB7E0077, $9F1E0091, $9A1A0047, $F1C30044
	Data.l $C8C200D2, $AE2900C4, $DE760054, $E3920097, $9E4D00AC, $9F5F0067, $CECE0073, $B74000CE
	Data.l $E2870067, $A65000A4, $9020006C, $D0610043, $9A420085, $9F55005F, $8716006D, $A357003B
	Data.l $7D0F0070, $AB620033, $AA26007A, $A63F0051, $DA630061, $BF860088, $87250099, $CD470045
	Data.l $7D0F0072, $B3740032, $99450088, $B4760060, $7705008A, $90190029, $B577003F, $DFDF008B
	Data.l $D3D300DF, $7B0C00D3, $81110031, $9D600034, $C3600073, $E1AD0080, $CC7900BE, $DB700094
	Data.l $CB3F0093, $CEC4006C, $EBA900C7, $A05000BE, $CF65006A, $D5D50087, $D24100D5, $8B28006F
	Data.l $DA630048, $C1B30089, $A55600B8, $9F480070, $A6590065, $B4750073, $9F190089, $9B1C0044
	Data.l $DDB40045, $A45600C1, $CDB6006F, $8F3100BD, $971B004F, $EBBD0044, $C17F00CC, $8B170095
	Data.l $AD65003C, $A365007C, $D69E0078, $E69800B0, $A95D00B1, $D44A0075, $B2730076, $BFAE0088
	Data.l $8E2A00B3, $AA1E004A, $9746004A, $DC6C0060, $CE310090, $CCCC0063, $FFFF00CC, $000000FF
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $80800000
	Data.l $80808080, $410A8080, $7E03472A, $80808080, $80808080, $137A5315, $0327167D, $8080807E
	Data.l $79808080, $7D7D7D2F, $0C187D7D, $8080805E, $671C8080, $1D5D767D, $254E5F5F, $80808080
	Data.l $7D116C80, $26096448, $803E4434, $80808080, $1E143C6A, $66806B22, $8080750E, $0B808080
	Data.l $4D593373, $8080805A, $80808080, $29008080, $2C3B4574, $80808080, $80057E78, $56718080
	Data.l $3149585B, $10808037, $057E0401, $2B655080, $0D2E6139, $0F60807E, $7E040107, $6E635121
	Data.l $6D177C02, $2D4C8036, $54010706, $69236252, $7B080230, $4F808080, $3F430646, $00801F70
	Data.l $80426F20, $80808080, $32382812, $8080721B, $80800077, $80808080, $5557195C, $80803D68
	Data.l $80808080, $4A808080, $24404B35, $80801A3A, $80808080, $80808080, $80808080, $03FF8080
	Data.l $01FC0000, $01F80000, $03F00000, $07E00000, $8FC00000, $FF810000, $C7030000, $82010000
	Data.l $00010000, $00010000, $80030000, $C0870000, $C0CF0000, $80FF0000, $FFFF0000, $00000000
EndDataSection

Verfasst: 13.06.2007 16:56
von D@nte
[... aufgeräumt ...]

Schien ja ganz einfach am Anfang ;)
Nachdem ich jetzt endlich Begriffen hab wie das mit den Headern und dem POST ist und wo ich die Werte herbekommen, funktioniert das holen der Liste nun auch wenn nen Passwort gesetzt ist.
Nur wie das so mit Problemen ist, hat man eins gelöst, taucht ein neues auf...

Code: Alles auswählen

Procedure IEGetFile(file.s,page.s); - Download a file from the internet
  If URLDownloadToFile_(#Null,@page,@file,#Null,#Null) = #S_OK
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Pass.s    = "Drowssap"
Server.s  = "fritz.box"
Path.s    = "cgi-bin/webcm"
Post.s    = "getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv&login%3Acommand%2Fpassword="
Send.s    = ""
Port      = 80

If InitNetwork() = #False : Debug "can't init network!" : Else
  SID = OpenNetworkConnection(Server, Port)
  If SID = #False : Debug "can't connect to '" + Server + "' !" : Else
    Send = "POST /" + Path + " HTTP/1.1"                      + #CRLF$
    Send + "Host: " + Server                                  + #CRLF$
    Send + "Keep-Alive: 30"                                   + #CRLF$
    Send + "Connection: keep-alive"                           + #CRLF$
    Send + "Referer: http://" + Server + "/" + Path           + #CRLF$
    Send + "Content-Type: application/x-www-form-urlencoded"  + #CRLF$
    Send + "Content-Length: 87"                               + #CRLF$
    Send + #CRLF$
    Send + Post + Pass + #CRLF$

    SendNetworkString(SID, Send)

;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181730308%2C-120&var%3Aactivtype=pppoe&var%3AtabInetstat=1&var%3Ashowsetup=";
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var:lang=de&var:menu=fon&var:razz:agename=foncalls"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181502063%2C-120&var%3Ashowsetup=&var%3Ashowall=&logger%3Asettings%2Ffilter=2"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=fon&var%3Apagemaster=&time%3Asettings%2Ftime=1181732471%2C-120"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181733847%2C-120&var%3Ashowsetup=&var%3Ashowall=&logger%3Asettings%2Ffilter=0"
    Path = "cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=foncalls&var:menu=fon"

    Send = "GET /"+ Path + " HTTP/1.1"           + #CRLF$
    Send + "Host: "+ Server                      + #CRLF$
    Send + "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" + #CRLF$
    Send + "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3" + #CRLF$
    Send + "Accept-Encoding: gzip,deflate"       + #CRLF$
    Send + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" + #CRLF$
    Send + "Connection: keep-alive"              + #CRLF$

    SendNetworkString(SID, Send)

    Delay(5000)

    Repeat
      Delay(10)
      Result = NetworkClientEvent(SID)
      Debug Result

      Select Result

        Case 2
          Response$ = Space($FFF)
          ReceiveNetworkData(SID, @Response$, Len(Response$))

          CloseNetworkConnection(SID)

          MessageRequester("", Response$)
          Ok = 1
          Debug IEGetFile("C:\test.csv","http://fritz.box/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv")

      EndSelect

    Until Ok = 1
  EndIf
EndIf
Soweit so gut Passwort wird akzeptiert und die Anrufliste wird als C:\test.csv gespeichert.
Problem ist, bevor ich die Liste speichere muss ich nochmal die Seite aufrufen wo die Anrufliste angezeigt wird um in der Box intern ein Event auszulösen das die FRITZ!Box_Anrufliste.csv neu schreibt also aktualisiert...
Und da hängt's hab in diversen Foren nach geguckt und bin auf folgende Links gestossen die die aktualisierung auslösen sollen:

Code: Alles auswählen

;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181730308%2C-120&var%3Aactivtype=pppoe&var%3AtabInetstat=1&var%3Ashowsetup=";
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var:lang=de&var:menu=fon&var:razz:agename=foncalls"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181502063%2C-120&var%3Ashowsetup=&var%3Ashowall=&logger%3Asettings%2Ffilter=2"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=fon&var%3Apagemaster=&time%3Asettings%2Ftime=1181732471%2C-120"
;    Path = "cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=foncalls&var%3Aerrorpagename=foncalls&var%3Amenu=home&var%3Apagemaster=&time%3Asettings%2Ftime=1181733847%2C-120&var%3Ashowsetup=&var%3Ashowall=&logger%3Asettings%2Ffilter=0"
    Path = "cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=foncalls&var:menu=fon"
Aber die tun's alle nicht...

Hier noch der Haeder zu http://fritz.box/cgi-bin/webcm?getpage= ... r:menu=fon

Code: Alles auswählen

http://fritz.box/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=foncalls&var:menu=fon

GET /cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:lang=de&var:pagename=foncalls&var:menu=fon HTTP/1.1
Host: fritz.box
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Cache-Control: no-cache
Content-Type: text/html
Expires: -1
Pragma: no-cache
Hoffe mir kann wer helfen langsam wird mein Hirn nämlich Breiig

Verfasst: 14.06.2007 09:23
von Then
Hat schon jemand ne Lösung dafür ?? Ich würde gerne auch eine Abfrage der BOX programmieren, hänge aber nun auch an genau dieser Stelle mit dem Passwort.

Muß man dafür die Fritz Software installieren ??

Verfasst: 14.06.2007 12:47
von D@nte
Ja.
Steht in meinem Post.
Nein.

Verfasst: 14.06.2007 15:45
von edel
Außerdem verwirrt mich das NetworkClientEvent(ConnectionID) immer 2 oder 0 ist obwohl ich eigentlich doch ne 3 bekommen müsste weil ich ja nen file anfrage?!
Wenn du eine Datei anforderst, wirst du immer Daten und keine "File"
bekommen. ReceiveNetworkFile kannst du nur dann nutzen, wenn die
Gegenstelle, die Datei mit SendNetworkFile gesendet hat.

Verfasst: 15.06.2007 14:55
von Then
Das hat bei mir gerade funktioniert :

Code: Alles auswählen

Pass.s    = "********" 
Server.s  = "fritz.box" 
Path.s    = "cgi-bin/webcm" 
Post.s    = "getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv&login%3Acommand%2Fpassword=" 
Send.s    = "" 
Port      = 80 

If InitNetwork() = #False : Debug "can't init network!" : Else 
  SID = OpenNetworkConnection(Server, Port) 
  If SID = #False : Debug "can't connect to '" + Server + "' !" : Else 
    Send = "POST /" + Path + " HTTP/1.1"                      + #CRLF$ 
    Send + "Host: " + Server                                  + #CRLF$ 
    Send + "Keep-Alive: 30"                                   + #CRLF$ 
    Send + "Connection: keep-alive"                           + #CRLF$ 
    Send + "Referer: http://" + Server + "/" + Path           + #CRLF$ 
    Send + "Content-Type: application/x-www-form-urlencoded"  + #CRLF$ 
    Send + "Content-Length: 87"                               + #CRLF$ 
    Send + #CRLF$ 
    Send + Post + Pass + #CRLF$ 
    SendNetworkString(SID, Send) 
    Delay(1000) 
    file.s="d:\test.csv"
    page.s="http://fritz.box/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2FFRITZ!Box_Anrufliste.csv"
    URLDownloadToFile_(#Null,@page,@file,#Null,#Null)
   CloseNetworkConnection(SID)
  EndIf 
 EndIf
... aber wo werden die aktuell reinkommenden Anrufe abgerufen ? Ich würde gerne eine eigene Anrufsignalisierung schreiben...

Verfasst: 15.06.2007 16:57
von D@nte
>Das hat bei mir gerade funktioniert :
Natürlich hat's funktioniert...
Allerdings werden damit nicht die aktuellsten Anrufe abgerufen sondern nur die die, die seit der letzten manuellen/automatischen Aktuallisierund unter "http://fritz.box/cgi-bin/webcm?getpage= ... fliste.csv" gespeichert wurden.

>aber wo werden die aktuell reinkommenden Anrufe abgerufen ?
da:
viel Erfolg beim porten

Code: Alles auswählen

#!/usr/bin/perl -w
#
# read_calls.pl
# 
# Synopsis:
# Script is run as a service daemon. It connects to the Fritz!Box Fon Ata
# (port 1012) and receives the calling string (number of the party calling 
# in). This number is passed on to another program. I.e. this could be an 
# Jabber client or a "look who called list".
# 
# Requirements:
# - must be able to reach tcp port 1012 on your FB
# - activate call monitor on FB by dialing #96*5*
# - required perl package
#
# Licence: GPL2
#
# History:
# ver. 0.1 - 20060401 - Lars G. Sander, Zuerich
# First public release.
# ver. 0.2 - 20060510 - Ulrich Dangel <fritzbox@spamt.net>
# Added telefon book support
# To Do:
# - beefed up security?
# - proxy functionality
# - additionally monitor calls OUT
use IO::Socket;
use strict;

# your fritz box (ip or hostname)
my $FRITZBOX="fritz.box";
my $TELEFONBUCH="$ENV{HOME}/doc/addressbook";
my $EXTPRO="/usr/bin/X11/xmessage";
#-------- NO USER SERVICABLE PARTS BELOW -------#


sub read_book {
    my %book = ();
    open(IN, "<", $TELEFONBUCH) || return ();
    while(<IN>){
        chomp;
        my @elements = split(":",$_);
        $book{$elements[0]}=$elements[1];
    }
    close(IN);
    return %book;
}


my %book = &read_book;

my $sock = new IO::Socket::INET (
        PeerAddr => $FRITZBOX,
        PeerPort => '1012',
        Proto => 'tcp'
        );
        die "Could not create socket: $!\n" unless $sock;
    
while(<$sock>) {
        if ($_ =~ /RING/){
                my @C = split(/;/);
                my $nr="";
                if (exists($book{$C[3]})) {
                    $nr=$book{$C[3]};
                } else {
                    $nr=$C[3];
                }
                my @args = ($EXTPRO, "Anruf: ", $nr);
                system(@args); 
        }
}

Verfasst: 15.06.2007 17:55
von Then
Hab auch schon ne Lösung gefunden.... ist evtl viel einfacher als man denkt !!

Wichtig ost PORT 1012... :wink:

Code: Alles auswählen

Server.s  = "fritz.box" 
Path.s    = "cgi-bin/webcm" 
Post.s    = "getpage=..%2Fhtml%2Fde%2FFRITZ%21Box_Anrufliste.csv&login%3Acommand%2Fpassword=" 
Send.s    = "" 
Port      = 1012
Pass      = "*****"

If InitNetwork() 
 SID = OpenNetworkConnection(Server, Port) 
 If SID
  Send = "POST /" + Path + " HTTP/1.1"                      + #CRLF$ 
  Send + "Host: " + Server                                  + #CRLF$ 
  Send + "Keep-Alive: 30"                                   + #CRLF$ 
  Send + "Connection: keep-alive"                           + #CRLF$ 
  Send + "Referer: http://" + Server + "/" + Path           + #CRLF$ 
  Send + "Content-Type: application/x-www-form-urlencoded"  + #CRLF$ 
  Send + "Content-Length: 87"                               + #CRLF$ 
  Send + #CRLF$ 
  Send + Post + Pass + #CRLF$ 
  SendNetworkString(SID, Send) 
  Delay(1000)
  Repeat 
   Delay(10) 
   Result = NetworkClientEvent(SID) 
   Select Result 
    Case 2 
     Response$ = Space($FFF) 
     ReceiveNetworkData(SID, @Response$, Len(Response$)) 
     Ok = 1 
   EndSelect 
  Until Ok = 1
  Debug Response$

Verfasst: 16.06.2007 21:10
von D@nte
Also irgendwie tut deine Lösung bei mir rein gar nix...
Was für'n Response soll die denn ausgeben?