![]() |
OAuth with IdHTTP vs. Synapse
Ich versuche gerade, eine Beispielroutine für OAuth-Authentifizierung von der Bibliothek "Synapse" nach "Indy" zu konvertieren.
Code:
procedure TForm1.AuthorizeButtonClick(Sender: TObject); // original by Lukas Gebauer, Ararat Synapse project
var http: thttpsend; response: string; A: TStringStream; begin http := THttpsend.Create; http.Protocol := '1.1'; http.UserAgent := 'DotNetOpenAuth/3.4.6.10357'; http.Document.position := 0; writestrtostream(http.Document, OAuthString); http.Document.position := 0; http.MimeType := 'application/x-www-form-urlencoded; charset=utf-8'; http.HTTPMethod('POST', oAuthURL); http.Document.position := 0; response := readstrfromstream(http.Document, http.Document.Size); memo1.Lines.Add(response); end;
Code:
Während die Synpase-Version mit dem gleichen OAuthString tadellos funktioniert, gibt die Indy-Version leider eine OAuth-Fehlermeldung zurück: "oauth_error_message=Error while reading message DotNetOpenAuth.OAuth.Messages.UnauthorizedTokenReq uest..."
procedure TForm1.ButtonAuthStringListClick(Sender: TObject);
var AHTTP : TIdHTTP; ARequest : TStringList; AResponse : String; begin AHTTP := TIdHTTP.Create; ARequest := TStringList.Create; ARequest.Add(OAuthString); AResponse := AHTTP.Post(OAuthURL, ARequest); Memo1.Lines.Add(AResponse); ARequest.Free; AHTTP.Free; end; Kennt jemand zufällig sowohl Synapse als auch Indy und kann sagen, woran das liegen kann? |
AW: OAuth with IdHTTP vs. Synapse
Ich kenne beides, habe mit beiden schon OAuth probiert (und kenne keine perfekte Implementierung, leider treten Fehler manchmal recht spät auf). Meine eigenen Versuche sind leider nur GET, nicht POST, aber spontan würde ich auf den offensichtlichsten Unterschied tippen: der MimeType, für die Interpretation von POST-Daten essentiell, und wie der Default by Indy ist (und ob der sich noch von 9 zu 10 unterscheidet), weiß ich nicht, der Sicherheit halber würde ich ihn immer manuell spezifizieren.
Außerdem verwendet Indy HTTP 1.0 und nicht 1.1 für POSTs (wenn Du kein spezielles Flag setzt), wobei ich die RFC nicht im Kopf habe, da kannst Du aber auch mal nachlesen, ob das einen Unterschied machen könnte. |
AW: OAuth with IdHTTP vs. Synapse
Danke für die schnelle Antwort. Leider kenne ich mich mit Indy wirklich nicht aus. Wo und wie kann ich denn den Mime-Typ setzen?
HTTP 1.0 vs 1.1 habe ich ausprobiert, das folgende bringt keine Verbesserung:
Code:
AHTTP := TIdHTTP.Create;
AHTTP.ProtocolVersion := pv1_1; AHTTP.HTTPOptions := AHTTP.HTTPOptions + [hoKeepOrigProtocol]; |
AW: OAuth with IdHTTP vs. Synapse
Ich habe es mit TSTringStream und TStringList ausprobiert. Beide ergeben inzwischen die gleiche oauth_error_message.
Was ist denn besser geeignet, um die richtige Zeichenkodierung durchzuziehen?
Code:
...
OAuthString :AnsiString; ... procedure TForm1.ButtonAuthStreamClick(Sender: TObject); var AHTTP : TIdHTTP; AStream : TStringStream; AResponse : String; begin AHTTP := TIdHTTP.Create; AHTTP.HandleRedirects := True; AHTTP.ProtocolVersion := pv1_1; AHTTP.HTTPOptions := AHTTP.HTTPOptions + [hoKeepOrigProtocol]; AHTTP.Request.ContentType := 'application/x-www-form-urlencoded; charset=utf-8'; AStream := TStringStream.Create(OAuthString); AResponse := AHTTP.Post(OAuthURL, AStream); Memo1.Lines.Add(AResponse); AStream.Free; AHTTP.Free; end; procedure TForm1.ButtonAuthStringListClick(Sender: TObject); var AHTTP : TIdHTTP; ARequest : TStringList; AResponse : String; begin AHTTP := TIdHTTP.Create; AHTTP.ProtocolVersion := pv1_1; AHTTP.HTTPOptions := AHTTP.HTTPOptions + [hoKeepOrigProtocol]; AHTTP.Request.ContentType := 'application/x-www-form-urlencoded; charset=utf-8'; ARequest := TStringList.Create; ARequest.Add(OAuthString); AResponse := AHTTP.Post(OAuthURL, ARequest); Memo1.Lines.Add(AResponse); ARequest.Free; AHTTP.Free; end; |
AW: OAuth with IdHTTP vs. Synapse
writestrtostream erwartet einen AnsiString, konvertiert ggfls..
Du verwendest 2010, ist Dein OAuthString evtl. kein AnsiString/RawByteString? Warum übergibst Du dem constructor des TStringStream kein Encoding? Erwartet der Server UTF-8, oder verwendest Du das nur "zufällig" im Synapse-Beispiel, sonst müsstet Du auch diesbzgl. schauen. |
AW: OAuth with IdHTTP vs. Synapse
OK, es klappt jetzt. Lag wohl tatsächlich an ContentType,userAgent und Protocol in irgendeiner Kombination. *puh*
Vielen Dank für Deine Hilfe! Du hast mich auf den richtigen Pfad gebracht... ...jetzt auf zu den nächsten Schritten im OAuth-Prozess... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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