fpHttpClient seltsames verhalten

Alle Fragen zur Netzwerkkommunikation
Antworten
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

fpHttpClient seltsames verhalten

Beitrag von Warf »

Hey ho leute, ich habe ein sehr seltsames verhalten bei der TFPHTTPClient Komponente bemerkt. Undswar wenn ich ein Http Request mit einigen Post Daten versende:

Code: Alles auswählen

FClient.FormPost(Format(Addr, [FHost]), Data);


Wobei Data eine TStringList ist mit folgendem Inhalt:
Username=root
FirstName=root
LastName=root
Birthday=02.08.2016
Phone=
Street=
Housenumber=
Zipcode=
City=
AdditionalAdress=
Token=D48DB9FCD053897DCB12D557906A796D1178A6A048AEAADB73E1391EEF4A68D0


so kommt beim HTTP server folgendes an:
Username=root
FirstName=root
LastName=root
Birthday=02.08.2016
Phone=02.08.2016
Street=02.08.2016
Housenumber=02.08.2016
Zipcode=02.08.2016
City=02.08.2016
AdditionalAdress=02.08.2016
Token=D48DB9FCD053897DCB12D557906A796D1178A6A048AEAADB73E1391EEF4A68D0


Ist das ein Bug oder ein Feature? Und falls es ein Feature ist, warum?

FPC 3.0.2

Lustigerweise passiert das nicht wenn ich diesen code verwende:

Code: Alles auswählen

  Data.Delimiter:='&';
  Data.StrictDelimiter:=True;
  Data.Text:=FClient.FormPost(Format(Addr, [FHost]), Data.DelimitedText)

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: fpHttpClient seltsames verhalten

Beitrag von Socke »

Wie sehen denn die kodierten Daten aus, die per HTTP übertragen werden?

Code: Alles auswählen

  Data.Delimiter:='&';
  Data.StrictDelimiter:=True;
  Data.Text:=FClient.FormPost(Format(Addr, [FHost]), Data.DelimitedText);

Im Prinzip ist das richtig, du solltes nur vorher alle Namen und Werte durch EncodeURLElement() kodieren, sodass auch Nicht-ASCII-Zeichen und Sonderzeichen korrekt übertragen werden.
Zuletzt geändert von Socke am Sa 1. Jul 2017, 21:58, insgesamt 1-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: fpHttpClient seltsames verhalten

Beitrag von Warf »

Socke hat geschrieben:Wie sehen denn die kodierten Daten aus, die per HTTP übertragen werden?

Code: Alles auswählen

  Data.Delimiter:='&';
  Data.StrictDelimiter:=True;
  Data.Text:=FClient.FormPost(Format(Addr, [FHost]), Data.DelimitedText);

Im Prinzip ist das richtig, du solltes nur vorher alle Namen und Werte durch EncodeURLElement() kodieren, sodass auch Nicht-ASCII-Zeichen und Sonderzeichen korrekt übertragen werden.


Wie die Kodierten daten FCL intern aussehen weiß ich nicht, da die Unit für FPHTTPClient keine Debuggersymbole enthält, ich aber nicht weiß wie ich das einstellen kann, daher kann ich mit dem Debugger nicht reinspringen und mir die Daten anschauen.

Muss man EncodeURLElement verwenden? Ich dachte im HTTP Body kann nach Standard auch Unicode verwendet werden, nur in der URL nicht.

Und dann auch die Frage anders herum, wenn ich mit Webmodules HTTP Requests bearbeite, welche von Browsern kommen, muss ich die Values dann Decoden mittels DecodeURLElement?

Antworten