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.

Bild

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! :allright:

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()"?
:freak: ja, das frage ich mich jetzt (nach Studium der Hilfe) allerdings auch... :lol:

Danke für den Tipp! :allright:

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.