![]() |
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:
Das versuche ich jetzt über Delphi und zwar so:
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
Delphi-Quellcode:
Bei Ausführen bekomme ich die Meldung "REST-Anforderung fehlgeschlagen: Fehler beim Abruf des Serverzertfikats."
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; 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 |
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. |
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 |
AW: RESTClient Basic Auth. funkt nicht
Weist Du den Authenticator zu?
|
AW: RESTClient Basic Auth. funkt nicht
Zitat:
Gruß Kostas |
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? ![]() Gruß Kostas |
AW: RESTClient Basic Auth. funkt nicht
Hallo,
nein, REST geht eigentlich immer. Das Problem ist immer, herauszufinden, welche Verbindungsoptionen der Server erwartet. |
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 |
AW: RESTClient Basic Auth. funkt nicht
Hallo
hier wurde noch ein anderer Ansatz für Basic Authentication benutzt: ![]() Aber ich sehe, das war nicht https. |
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; |
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 |
AW: RESTClient Basic Auth. funkt nicht
Nein, in dem Fall nicht. Wenn ich ssl verwende benutze ich den normalen IdHttp Client mit iohandler.
|
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 |
AW: RESTClient Basic Auth. funkt nicht
Hallo Zusammen,
ich habe ein interessantes Video gefunden welches den REST-Debugger beschreibt. ![]() 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 |
AW: RESTClient Basic Auth. funkt nicht
Ich habe jetzt noch mal einen kleinen Test aufgesetzt. Funktioniert.
Delphi-Quellcode:
Request:
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;
Code:
Response:
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
Code:
{
"uuid": "bb60316c-fcc6-4410-87e2-1c73916ce396" } |
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 ![]() ![]() 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 ![]() Um das Mars-Curionsity Projekt nutzen zu können, müssen die Sources über Git heruntergeladen werden. In dem ![]() Zusätzlich werden noch die ![]() 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:
Schöne Grüße und ein herzlichen Dank an alle.
MobileDeClient.HttpClient.Request.BasicAuthentication = True
MobileDeClient.HttpClient.Request.Password = '' MobileDeClient.HttpClient.Request.Username = '' Kostas |
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