Delphi-PRAXiS
Seite 1 von 2  1 2      

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Seite 1 von 2  1 2      

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