fpHttpClient seltsames verhalten

Alle Fragen zur Netzwerkkommunikation

fpHttpClient seltsames verhalten

Beitragvon Warf » 30. Jun 2017, 23:50 fpHttpClient seltsames verhalten

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)
Warf
 
Beiträge: 754
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Socke » 1. Jul 2017, 19:46 Re: fpHttpClient seltsames verhalten

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 1. Jul 2017, 20:58, insgesamt 1-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2483
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Warf » 1. Jul 2017, 20:56 Re: fpHttpClient seltsames verhalten

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?
Warf
 
Beiträge: 754
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Netzwerk



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried