Seite 1 von 2
HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 15:58
von Kiffi
Hallo,
wie kann ich POST-Daten an
HTTPRequestMemory() übergeben?
Beispielsweise:
username="Peter"
password="12345"
Code: Alles auswählen
HttpRequest = HTTPRequestMemory(#PB_HTTP_Post, "http://meineSeite", ?...
Danke im Voraus & Grüße ... Peter
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 17:22
von man-in-black
Hi,
ohne es zu testen:
String.s = "nutzername=peter&passwort=223"
den dann in den Speicher und die Adresse an die Funktion geben.
MFG
MIB
edit: oder gleich vom String den Pointer nehmen
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 18:34
von Kiffi
Hi man-in-black,
nee, klappt leider noch nicht. Der Server sendet dann einen StatusCode 403.
Um konkreter zu werden: Ich versuche, das Event-Log meiner FritzBox auszulesen.
Hierzu muss ich
http://fritz.box/data.lua mit den erforderlichen POST-Parametern aufrufen. Diese habe ich aus der Chrome-Developer-Console ermittelt.
Mit ARC (Advanced REST client) habe ich dann erfolgreich das Event-Log auslesen können.
Ich achte natürlich darauf, dass die SID aktuell ist.
Code: Alles auswählen
InitNetwork()
Define PostParams.s = "xhr=1&sid=[GueltigeSID]&lang=de&page=log&xhrId=all&no_sidrenew="
NewMap Header$()
Header$("Content-Type") = "application/x-www-form-urlencoded"
Header$("Content-Length") = Str(StringByteLength(PostParams))
HttpRequest = HTTPRequestMemory(#PB_HTTP_Post, "http://fritz.box/data.lua", @PostParams, StringByteLength(PostParams), 0, Header$())
If HttpRequest
Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
FinishHTTP(HTTPRequest)
Else
Debug "Request creation failed"
EndIf
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 18:44
von Bisonte
Hast du eventuell mal probiert einen UTF8 String zu senden ? PB ist doch ünicöde... evt. reicht da ein *PostParam = UTF8("...") ?
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 18:55
von Kiffi
@Bisonte: Du bist ein Schatz! Ett klappt!
Code: Alles auswählen
EnableExplicit
InitNetwork()
Define *PostParams
Define HTTPRequest
*PostParams = UTF8("xhr=1&sid=[GueltigeSID]&lang=de&page=log&xhrId=all&no_sidrenew=")
HttpRequest = HTTPRequestMemory(#PB_HTTP_Post, "http://fritz.box/data.lua", *PostParams, MemorySize(*PostParams))
If HttpRequest
Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
FinishHTTP(HTTPRequest)
Else
Debug "Request creation failed"
EndIf
Danke & Grüße ... Peter
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 19:16
von Sicro
@Kiffi:
Wieso nimmst du nicht einfach den Befehl "HTTPRequest()"?
Bei dem kannst du die POST-Parameter als String übergeben.
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 20:08
von Kiffi
Sicro hat geschrieben:Wieso nimmst du nicht einfach den Befehl "HTTPRequest()"?

ja, das frage ich mich jetzt (nach Studium der Hilfe) allerdings auch...
Danke für den Tipp!
Nachträglich auch noch mal Danke an man-in-black!
Grüße ... Peter (lernt nie aus)
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 21:05
von mk-soft
Hi Kifft,
wenn du so weit bist, kannst du mal schreiben wie man die Anruferlisten abfragen kann.
Man muss sich ja anmelden um diese Daten abzufragen.
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 13.02.2019 22:44
von Kiffi
mk-soft hat geschrieben:wenn du so weit bist, kannst du mal schreiben wie man die Anruferlisten abfragen kann.
Code: Alles auswählen
InitNetwork()
HttpRequest = HTTPRequest(#PB_HTTP_Post, "http://fritz.box/data.lua", "xhr=1&sid=[DeineSID]&lang=de&page=dialLi&no_sidrenew=")
If HttpRequest
Debug "StatusCode: " + HTTPInfo(HTTPRequest, #PB_HTTP_StatusCode)
Debug "Response: " + HTTPInfo(HTTPRequest, #PB_HTTP_Response)
FinishHTTP(HTTPRequest)
Else
Debug "Request creation failed"
EndIf
mk-soft hat geschrieben:Man muss sich ja anmelden um diese Daten abzufragen.
Für das Anmelden und Ermitteln der SID habe ich im Forum folgenden Code gefunden (finde die Quelle momentan leider nicht mehr):
Code: Alles auswählen
EnableExplicit
InitNetwork()
Global uiPass.s, gSeite.s, user.s
UseMD5Fingerprint()
uiPass = "DeinPass"
user.s = "DeinUser"
Procedure SeiteLaden(Seite.s)
Protected *Buffer
Protected Size
gSeite = ""
*Buffer = ReceiveHTTPMemory("http://fritz.box" + Seite)
If *Buffer
Size = MemorySize(*Buffer)
gSeite = PeekS(*Buffer, Size, #PB_UTF8|#PB_ByteLength)
FreeMemory(*Buffer)
Else
MessageRequester("Fehler", "Fehler beim Laden der Seite" + #CRLF$ + Seite)
EndIf
EndProcedure
Procedure.s FindeDaten(Suche.s, Stelle = 1, eSuche.s = "")
Protected aSuche.s
Protected PzWertA.s
aSuche.s = "<" + Suche + ">"
If eSuche = "" : eSuche.s = "</" + Suche + ">" : EndIf
PzWertA.s = StringField(gSeite, Stelle + 1, aSuche)
ProcedureReturn StringField(PzWertA, 1, eSuche)
EndProcedure
Procedure.s fbSID()
Protected *Buffer
Protected PzWertC.s
Protected PzWertA.s
Protected PzWertB.s
Protected a
SeiteLaden("/login_sid.lua")
*Buffer = AllocateMemory(200)
PzWertC.s = FindeDaten("Challenge")
PzWertA.s = PzWertC + "-" + uiPass
For a = 1 To Len(PzWertA)
PokeC(*Buffer + a + a - 2, Asc(Mid(PzWertA,a,1)))
PokeC(*Buffer + a + a - 1, 0)
Next
PzWertB.s = Fingerprint(*Buffer, Len(PzWertA) + Len(PzWertA),#PB_Cipher_MD5)
FreeMemory(*Buffer)
SeiteLaden("/login_sid.lua?response=" + PzWertC + "-" + PzWertB + "&username=" + user)
ProcedureReturn FindeDaten("SID")
EndProcedure
Define SID.s
SID = fbSID()
Debug SID
Grüße ... Peter
Re: HTTPRequestMemory(): Wie übergebe ich die POST-Daten?
Verfasst: 14.02.2019 10:32
von Bisonte
Kiffi hat geschrieben:
Für das Anmelden und Ermitteln der SID habe ich im Forum folgenden Code gefunden (finde die Quelle momentan leider nicht mehr):
Quelle nachreich
viewtopic.php?f=16&t=30484 auf Seite 2.