Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   RESTClient Basic Auth. funkt nicht (https://www.delphipraxis.net/194625-restclient-basic-auth-funkt-nicht.html)

Kostas 13. Dez 2017 21:37

RESTClient Basic Auth. funkt nicht
 
Hallo Zusammen,

das mitgelieferte Beispiel Embarcadero REST-Library Demos funktioniert einwandfrei um eine Verbindung auf Delphi-PRAXIS durchzuführen.
Genau dieses Beispiel verwende ich als Basis zu einem Service auf Mobile.de zuzugreifen. In der Doku ist ein Beispiel über das tool curl.
Da sieht die connection so aus:


Code:
curl -k -x api.test.sandbox.mobile.de:8080  -basic -u meinUsername:meinPasswort -X GET "https://services.mobile.de/seller-api/sellers/" -H "Accept: application/vnd.de.mobile.api+json" | jq
Das versuche ich jetzt über Delphi und zwar so:

Delphi-Quellcode:
HTTPBasicAuthentificator.Username := xxx;
HTTPBasicAuthentificator.Password := yyy;


RESTRequest.Accept := 'application/vnd.de.mobile.api+json'; <<< ist das so richtig? Mobile.de meint der String muss im Header stehen.
RESTRequest.Resource := 'https://services.mobile.de/seller-api/sellers/';

RESTClient.BaseURL := 'https://api.test.sandbox.mobile.de:8080';

RESTRequest.Execute;
Bei Ausführen bekomme ich die Meldung "REST-Anforderung fehlgeschlagen: Fehler beim Abruf des Serverzertfikats."
Egal welchen Username oder Passwort übergebe, kommt die gleiche Fehlermeldung.

Da die Base URL https ist, könnte das die Ursache sein? Brauche ich dafür die SSL Libs? Das Delphi Beispiel connectet sich als Base-URL per HTTP.
Die Verbindung lauf Mobile.de soll über Basic-Authentification erfolgen.

Hat hat jemand eine Idee?
Gruß Kostas

bernau 14. Dez 2017 08:10

AW: RESTClient Basic Auth. funkt nicht
 
Die Fehlermeldung hat auf jeden Fall was mit dem https zu tun.

Zur abfrage der Usernamen und der Passwortes kommt es erst gar nicht.

Vielleicht ist es ja auch möglich, zum testen ohne https zu arbeiten sondern nur mit http. Änder doch zum Test einfach mal die Url auf http.

Kostas 14. Dez 2017 08:58

AW: RESTClient Basic Auth. funkt nicht
 
Danke für die Info,

wenn die BaseURL und Resource-URI jeweils http ist, kommt die Meldung "The requested URL could not be retrieved"
Es wird ein html content gesendet. Bei Interesse kann ich den html content anhängen.

Ist es generell nicht möglich über die Delphi RESTClient Komponente HTTPS Verbindungen als Basic-Auth. herzustellen?
Das HTTPS generell nicht funktioniert wird nicht der Falls sein da das mitgelieferte Beispiel stellt auch eine Verbindung zu Twitter und co über https her. Die https Beispiele verwenden allerdings Auth1 und Auth2 mit Zertifikate und so ein Kram.

Gruß Kostas

Union 14. Dez 2017 09:19

AW: RESTClient Basic Auth. funkt nicht
 
Weist Du den Authenticator zu?

Kostas 14. Dez 2017 11:47

AW: RESTClient Basic Auth. funkt nicht
 
Zitat:

Zitat von Union (Beitrag 1388824)
Weist Du den Authenticator zu?

Ja klar, ich habe die Beispielanwendung verwendet, einen neune Tab für meine Verbindung, alle Komponenten aus dem Beispiel Delphi-Praxis kopiert.
Gruß Kostas

Kostas 15. Dez 2017 10:05

AW: RESTClient Basic Auth. funkt nicht
 
Hallo Zusammen,

kann es generell an der Delphi Komponente RESTClient und co liegen?
Hat jemand Erfahrung mit alternativen Komponenten die das könnten.
Beim suchen bin ich auf das Project Mars Curiosity gestossen. Könnte das etwas sein?

https://blog.andreamagni.eu/2016/03/...-rest-library/

Gruß Kostas

hoika 15. Dez 2017 10:46

AW: RESTClient Basic Auth. funkt nicht
 
Hallo,
nein, REST geht eigentlich immer.
Das Problem ist immer, herauszufinden, welche Verbindungsoptionen der Server erwartet.

Kostas 15. Dez 2017 11:17

AW: RESTClient Basic Auth. funkt nicht
 
Hallo Heiko,

ok, die Info ist schon mal sehr erfreulich.
Das Problem ist die BaseUSL ist eine https und eine Basic-Authentification.
Es gibt aber nur einen HTTPBasicAuthentificator. Meinst du dass es dennoch funktionieren müsste?

Die Zugangsdaten habe ich mit dem Empfohlenen Tool "curl" testen können, die passen.
Hast du noch eine Idee?

Gruß Kostas

hoika 15. Dez 2017 11:54

AW: RESTClient Basic Auth. funkt nicht
 
Hallo
hier wurde noch ein anderer Ansatz für Basic Authentication benutzt:

http://www.delphipraxis.net/122473-i...ntication.html

Aber ich sehe, das war nicht https.

Union 15. Dez 2017 14:42

AW: RESTClient Basic Auth. funkt nicht
 
Ich sehe gerade, dass die Resource-property fehlerhaft gesetzt zu sein scheint. Der Request wird aus BaseURL und Resource zusammengesetzt.
Hier mal ein kleines Beispiel für einen JIRA-Rest-Request:

Delphi-Quellcode:
function GetAuthenticator : THTTPBasicAuthenticator;
begin
  Result := THTTPBasicAuthenticator.Create(TConfig.Username, TConfig.Password);
end;

function GetIssuesForUser(const AUserName : string) : TIssueList;
var
  LIssue : TIssue;
  RESTClient : TRESTClient;
  RESTRequest : TRESTRequest;
  JSONValue : TJsonValue;
  JSONObject : TJSONObject;
  JSONArr : TJSONArray;
  i : Integer;
begin
  Result    := TIssueList.Create;
  RESTClient := TRESTClient.Create(TConfig.BaseURL);
  RESTClient.Authenticator := GetAuthenticator;
  {$IFDEF FIDDLER}
  // Zum Test mit Fiddler
  RESTClient.ProxyPort := 8888;
  RESTClient.ProxyServer := '127.0.0.1';
  {$ENDIF}

  RESTRequest := TRESTRequest.Create(RESTClient);
  RESTRequest.Method := TRESTRequestMethod.rmGET;
  RESTRequest.Resource := 'search?jql=assignee={username}+'+
                          'AND+status+in+("'+TConfig.Filter+'")'+
                          '&fields=key,summary,status';
  try
    RESTRequest.Params.AddItem('username', AUserName, TRESTRequestParameterKind.pkURLSEGMENT);
    RESTRequest.Execute;
    if RESTRequest.Response.StatusCode = 200 then
    begin
      // JSON zerpflücken
      JSONValue := RESTRequest.Response.JSONValue;
      if JSONValue is TJSONObject then
      begin
         JSONArr := TJSONArray(TJSONObject(JSONValue).GetValue('issues'));
         for i := 0 to JSONArr.Size -1 do
         begin
           LIssue := TIssue.Create;
           Result.Add(LIssue);
           JSONObject := TJSONObject(JSONArr.Get(i));
           GetIssueData(JSONObject, LIssue);
         end;
      end;
    end;
  except
    On E: Exception do
    begin
      LIssue := TIssue.Create;
      LIssue.Key := E.Message;
      Result.Add(LIssue);
    end;
  end;
  RESTRequest.Free;
  RESTClient.Authenticator.Free;
  RESTClient.Free;
end;

Kostas 16. Dez 2017 17:34

AW: RESTClient Basic Auth. funkt nicht
 
Hallo Union,

leider bekomme ich immer noch die gleiche Fehlermeldung.

"REST-Anforderung fehlgeschlagen: Fehler beim Abruf des Serverzertfikats."

Ist deine BaseURL auch https?

Gruß Kostas

Union 17. Dez 2017 09:33

AW: RESTClient Basic Auth. funkt nicht
 
Nein, in dem Fall nicht. Wenn ich ssl verwende benutze ich den normalen IdHttp Client mit iohandler.

Kostas 17. Dez 2017 09:51

AW: RESTClient Basic Auth. funkt nicht
 
Hallo Union,

ah, das ist dann ein Hinweis dass SSL mit RESTClient nicht funktioniert?
Ok, dann muss ich mir die IdHTTP Variante genauer anschauen.

Dankeschön für die Info.
Gruß Kostas

Kostas 18. Dez 2017 13:10

AW: RESTClient Basic Auth. funkt nicht
 
Hallo Zusammen,


ich habe ein interessantes Video gefunden welches den REST-Debugger beschreibt.
https://www.youtube.com/watch?v=CARIBaJL-DY

In dem Video wird ebenfalls eine Base-URL vom typ https verwendet!
Also wird https anscheinend unterstützt. Wenn ich meine Daten in REST-Debugger eintrage, bekomme ich wieder die gleiche Fehlermeldung. "REST-Anfordrung fehlgeschlagen: Fehler beim Abrufen des Serverzertifikats."

Ich werde jetzt nochmals mit Mobile.de Kontakt aufnehmen. Möglicherweise erfahre ich was genau die voraussetzen. Zumindest scheint es nicht an RESTClient zu liegen.

Gruß Kostas

Union 19. Dez 2017 08:27

AW: RESTClient Basic Auth. funkt nicht
 
Ich habe jetzt noch mal einen kleinen Test aufgesetzt. Funktioniert.

Delphi-Quellcode:
uses
  REST.Client,
  REST.Types,
  REST.Authenticator.Basic,
  IPPeerClient,
  IPPeerAPI;

procedure TestRestClient;
var
  Client : TRESTClient;
  Request : TRESTRequest;
begin
  Client := TRESTClient.Create('https://httpbin.org/');
  try
    Request := TRESTRequest.Create(Client);
    try
      Request.Method := TRESTRequestMethod.rmGET;
      Request.Resource := 'uuid';
      Request.Execute;
      Writeln(Request.Response.Content);
    finally
      Request.Free;
    end;
  finally
    Client.Free;
  end;
end;
Request:
Code:
GET https://httpbin.org/uuid HTTP/1.1
Host: httpbin.org
Accept: application/json, text/plain; q=0.9, text/html;q=0.8,
Accept-Charset: UTF-8, *;q=0.8
Accept-Encoding: identity
User-Agent: Embarcadero RESTClient/1.0
Response:
Code:
{
  "uuid": "bb60316c-fcc6-4410-87e2-1c73916ce396"
}

Kostas 19. Dez 2017 10:57

AW: RESTClient Basic Auth. funkt nicht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Union,

ah, das bedeutet HTTPS muss also auch mit RESTClient funktionieren. Ich werde auch diesen Weg versuchen umzusetzen.

Ich habe zufällig das Projekt MARS-Curiosity von Andrea Magni gefunden.

Da er sich mit RESTClient und Server beschäftigt habe ich ihn gefragt ob er mir weiterhelfen kann da ich keine Verbindung herstellen kann zu Mobile.de.
Prompt hat mit eine Demo erzeugt wie es mit Mars-Curiosity funktioniert.
Dieses Projekt habe ich angehängt. Unter der Haube von Mars-Curiosity steckt Indy. Andrea meinte, er wird die Tage versuchen sein Projekt zu erweitern so dass kein OpenSSL mehr benötigt wird. Er wird dafür ein neuen branch anlegen.

Um das Mars-Curionsity Projekt nutzen zu können, müssen die Sources über Git heruntergeladen werden. In dem Video wird gezeigt wir das über Git funktioniert.

Zusätzlich werden noch die openSSL DLLs benötigt. Ich habe die vorletzte Version der Liste verwendet. openssl-1.0.2n-i386-win32.zip.

Für die Verbindung wird noch der Username und Password benötigt.
Wenn es jemand testen möchte, schreibt mir eine PN und dann bekommt er meine Testzugangsdaten.

Delphi-Quellcode:
    MobileDeClient.HttpClient.Request.BasicAuthentication = True
    MobileDeClient.HttpClient.Request.Password = ''
    MobileDeClient.HttpClient.Request.Username = ''
Schöne Grüße und ein herzlichen Dank an alle.
Kostas

Union 19. Dez 2017 11:17

AW: RESTClient Basic Auth. funkt nicht
 
Unter der Haube vom TRestClient wird auch über eine Peerfactory ein Indy-Client erzeugt (wenn IPPeerClient als Implementierung gelinkt wird). Leider ist in den Interfaces natürlich nur das Minimum enthalten und man muss dann evtl. typecasten und rumtricksen um an wichtige Eigenschaften heranzukommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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