Hallo,
beim Zugriff auf eine
API (Webservice) wird eine HTTP Basic Authentication über SSL benötigt.
Hier ein Ausschnitt aus einem mitgelieferten Beispiel in PHP:
Code:
require_once('
SOAP/Client.php');
$client = new SOAP_client('https://a.b.domain.net/namespace/');
// Protocol version must be HTTP 1.1.
$client->setOpt('curl', CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// curl comes with a number of predefined certifiers it recognizes. We use Thawte, which is not
// a part of this set. There should be a better way of dealing with this, see curl documentation.
// we here just don't verify the peer.
$client->setOpt('curl', CURLOPT_SSL_VERIFYPEER, FALSE);
// username and password
$client->setOpt('curl', CURLOPT_USERPWD, "Benutzername:Passwort");
Sehe ich das richtig dass hier die HTTP-Version auf 1.1, der Benutzername + PW für die HTTP Basic Authentication gesetzt werden und die Überprüfung des SSL-Zertifikats ausgeschaltet wird?
Kommen wir zu meinem Versuch in Delphi
Ich habe über den
WSDL-Import eine neue
Unit erstellt. Der Aufruf sieht so aus:
Delphi-Quellcode:
var
rio: THttpRio;
procedure TfrmMain.btnTestClick(Sender: TObject);
var
WebService: WebServiceSoap;
begin
rio := THTTPRIO.Create(self);
rio.HTTPWebNode.UserName := 'Benutzername';
rio.HTTPWebNode.Password := 'Passwort';
rio.HTTPWebNode.OnBeforePost := self.HttpRioHttpWebNodeBeforePost;
WebService:= GetWebServiceSoap(False, '', rio);
mmoLog.Lines.Add(WebService.WebServiceAction('0').SqlXml);
end;
procedure TfrmMain.HttpRioHttpWebNodeBeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
begin
if not InternetSetOption(Data,
INTERNET_OPTION_HTTP_VERSION,
PChar('HTTP/1.1'), // stimmt das?!
System.Length('HTTP/1.1')) then
ShowMessage(SysErrorMessage(GetLastError));
if not InternetSetOption(Data,
INTERNET_OPTION_USERNAME,
PChar(rio.HTTPWebNode.UserName),
System.Length(rio.HTTPWebNode.UserName)) then
ShowMessage(SysErrorMessage(GetLastError));
if not InternetSetOption(Data,
INTERNET_OPTION_PASSWORD,
PChar(rio.HTTPWebNode.Password),
System.Length (rio.HTTPWebNode.Password)) then
ShowMessage(SysErrorMessage(GetLastError));
end;
Dabei hat mir
dieser Thread weitergeholfen.
Ich denke, HTTP Basic Authentication habe ich abgehackt, bei der HTTP-Version bin ich mir nicht sicher, ob ich das richtig gemacht habe. Fehlt nur noch die SSL-Zertifikat-Überprüfung-Abschaltung
Jemand ne Idee, wie ich das abschalten kann?
Es kommt übrigens diese Fehlermeldung wenn ich versuche das auszuführen:
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse ESOAPHTTPException mit der Meldung 'The certificate authority is invalid or incorrect -
URL:
https://a.b.domain.net/namespace - SOAPAction:https://a.b.domain.net/namespace/WebServiceAction' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Danke für eure Hilfe
Dominik