Einzelnen Beitrag anzeigen

Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#6

AW: Zweites AddHeader im RestRequest geht nicht

  Alt 24. Apr 2020, 09:52
Hi Zusammen,

Sicher das der Kollege recht hat
Naja, ich glaube ihm, dass sein Programm sagt "da ist nur Wert A aber nicht Wert B".
Mir scheint das aber ein Problem im Zusammenspiel zwischen Delphi und seiner
Programmiersprache zu sein. Hier im Haus hatte ich schonmal ein Problem mit .Net,
wo die Änderung eines Aufrufes von
RESTRequest.Params.AddHeader(...) nach
RESTRequest.AddParameter(...) das Problem behoben hat.
Fragt mich! Ich habe keine Ahnung was das war.
Klingt für mich nach "Oh der Kugelschreiber liegt links von der Tastatur, ja dann kann das Programm auch nicht funktionieren!".

es kommt drauf an, was AddHeader macht
...
Setze einfach mal einen Haltepunkt auf TCustomRESTRequest.Execute in der Unit REST.Client. Dort wird der Request zusammengebaut.
Ich habe nun mal da reingeschaut ... war übersichtlicher als ich befürchtet hatte ...
Dort konnte ich feststellen, dass Params 2 Elemente hat und bis kurz vor dem Senden war auch alles gut.

---

Lösung:
So! Ich habe mir dann gedacht: Gut, baust du mal einen Rest-Server und schaust was da ankommt.
Das war aber auf die Schnelle nicht so einfach zu erreichen.
Ich habe zumindest nichts (jetzt heute morgen mit 15 Minuten suchen) finden können,
dafür bin ich in der Delphi-Hilfe bei meiner Suche aber auf den Rest-Debugger von Embarcadero gestoßen.
Also dachte ich mir: "Ich habe eh das Gefühl, dass ich selbst irgendwas falsch mache und
dass das normalerweise geht, sonst würden sicher schon einige Leute mit Fackel und Forke
vor dem Hauptsitz von Embarcadero rumhocken!" ... Ich habe meine Daten eingegeben und oh Wunder
genau wie in Postman geht es. Nun, im Rest-Debugger war beim Hinzufügen von Parametern ein Haken
"Nicht Verschlüsseln", den ich aktiviert hatte. Als ich den Haken entfernt hatte, bekam ich den
gleichen "401 - Unauthorized"-Fehler im Rest-Debugger, wie ich auch in meinem Programm bekommen habe.
Nach etwas Nachforscherei und habe ich dann herausgefunden, dass "AddParameter" mehrere Parameterlisten hat.
Eine Variation hat "Optionen" und hier kann man "poDoNotEncode" angeben.
Setzt komme ich weiter! Das war das Problem.

Also nochmalzusammengefasst: Bei mir lief es dann, wenn ich beide Parameter mit
RESTRequest.AddParameter('xxx', 'yyy', pkHTTPHEADER, [poDoNotEncode]); übergebe.

Das ganze hat mich dann nochmal Neugierig gemacht und ich habe mal Wireshark angeworfen,
aber egal ob mit oder ohne "poDoNotEncode", bei beidem bekomme ich bei einer https-Verbindung
nur Bytesalat, den ich selbst zumindest nicht mehr entschlüsseln kann.
Scheint also ohne den Header extra zu kodieren auch sicher zu sein.
Frage an dieser Stelle vielleicht nochmal:
Warum können Parameter seperat codiert werden? Was passiert dann?

Und mal so allgemein gefragt: Warum kommt 1 Parameter an, der 2 dann aber nicht?
Habe nur ich solch ein seltsames Verhalten?

Alles so Dinge, wo wir uns nun in Ruhe drüber unterhalten können,
da ich ja nun erstmal weiter komme.

Vielen Dank für die Tipps und Ideen soweit schonmal und ich hoffe,
dass andere in Zukunft durch diesen Post schneller auf die richtige Lösung kommen.
(Obwohl das zugegegebenermaßen doch noch unglaublich fix gelöst war!)

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat