AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke OAuth with IdHTTP vs. Synapse
Thema durchsuchen
Ansicht
Themen-Optionen

OAuth with IdHTTP vs. Synapse

Ein Thema von HJay · begonnen am 18. Dez 2012 · letzter Beitrag vom 18. Dez 2012
Antwort Antwort
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 03:11
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:
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;
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..."

Kennt jemand zufällig sowohl Synapse als auch Indy und kann sagen, woran das liegen kann?
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#2

AW: OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 07:03
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.
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 10:10
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];
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#4

AW: OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 10:20
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;

Geändert von HJay (18. Dez 2012 um 10:42 Uhr) Grund: Beispiele
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#5

AW: OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 10:29
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.
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#6

AW: OAuth with IdHTTP vs. Synapse

  Alt 18. Dez 2012, 10:38
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...

Geändert von HJay (18. Dez 2012 um 13:15 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz