![]() |
AW: IdHTTPost funktioniert nicht
Was hast Du für eine Delphi Version? Es wäre wirklich besser Du würdest mit einem REST Framework arbeiten.
Vor 10.4.1 habe ich MARS gearbeitet. Ultra einfach und flexibel: ![]() Jetzt mit der in Delphi integrierten RestApi. Diese ist nun auch (halbwegs) brauchbar |
AW: IdHTTPost funktioniert nicht
Hmm..
Verwende mal folgendes:
Delphi-Quellcode:
Da es sich bei 'Authorization' nicht um eine BasicAuthentication handelt, kann es sein, dass INDY den Parameter löscht, wenn kein User mit Passwort angegeben ist.
Http.Request.BasicAuthentication := False;
Http.Request.CustomHeaders.FoldLines := False; Http.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + AToken; Hiermit kann ich zumindestens eine OST Abfrage unter Verwendung eines Tokens erfolgreich gegen ein Kundensystem laufen lassen. |
AW: IdHTTPost funktioniert nicht
Hallo HolgerX,
danke für das Beispiel. Leider funktioniert es immer noch nicht. Ich bekomme als Rückmeldung 401 unauthorized. Da der Aufruf mit curl ja funktioniert, wird in Delhpi irgendetwas falsch übergeben. Der String im falschen Format übergeben oder es wird etwas abgeschnitten. Leider weiss ich nicht wie ich den http.post "abfangen" kann, so dass ich sehe was wirklich an den connector übergeben wird. Hat hier einer eine Idee? Viele Grüße Horst |
AW: IdHTTPost funktioniert nicht
Zitat:
Mit Telrik Fiddler könntest du in ein paar Minuten den Inhalt vom Beispiel-POST per curl mit deinen Delphi-POST vergleichen und den entscheidenden Unterschied erkennen. |
AW: IdHTTPost funktioniert nicht
Zitat:
![]() |
AW: IdHTTPost funktioniert nicht
401 heißt: Die Anmeldung passt nicht.
Meine Erfahrung: Nicht alle Server arbeiten problemlos mit Indy. Zuweilen hilft es, den Inhalt von UserAgent der HTTP-Komponente mit dem Wert eines aktuellen Browsers "zu versorgen". Kann helfen, muss aber nicht. ![]() |
AW: IdHTTPost funktioniert nicht
So setze ich den Http-Header wenn Indy genutzt wird. Die Angaben in spitzen Klammern sind entsprechend zu ersetzen (UserAgent, Application):
Delphi-Quellcode:
So setze ich den RestClient ein:
FClient.Request.UserAgent := '<UserAgent>';
FClient.Request.Accept := 'application/<Application>+json'; FClient.HandleRedirects := true; FClient.Request.CustomHeaders.Clear; FClient.Request.CustomHeaders.AddValue('Accept-Language','de-DE'); FClient.Request.CustomHeaders.AddValue('authorization', 'Bearer ' + FToken); FClient.HTTPOptions := FClient.HTTPOptions + [hoWantProtocolErrorContent];
Delphi-Quellcode:
Beide Methoden funktionieren mit verschiedenen Ziel-Servern produktiv bei > 1000 Usern.
FRestClient := TRESTClient.Create(BASEURL);
FRestRequest := TRestRequest.Create(nil); FRestResponse := TRESTResponse.Create(nil); FRestRequest.Client := FRestClient; FRestRequest.Response := FRestResponse; FRestRequest.HandleRedirects := True; FRestRequest.Params.Clear; FRestRequest.Accept := 'application/<application>+json'; FRestRequest.Params.AddHeader('Accept-Language', 'de-DE'); FRestRequest.AddParameter('Authorization', FAuthorization , pkHTTPHEADER, [poDoNotEncode]); FRestRequest.OnHTTPProtocolError := CatchHttpProtocolError; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz