AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Webservice + SSL + D2010

Ein Thema von mcbain · begonnen am 8. Sep 2011 · letzter Beitrag vom 14. Sep 2011
 
mcbain

Registriert seit: 18. Mai 2011
50 Beiträge
 
#1

Webservice + SSL + D2010

  Alt 8. Sep 2011, 15:00
Hallo,
ich versuche gerade einen Webservice über HTTPS zu konsumieren. Leider funktioniert es nicht.

Ich nutze dafür eigentlich nur die HTTPClient Komponente.
Hier ein Beispiel welches problemlos funktioniert:

Code:

function TForm2.SendRequest(): string;
var err, str: string;
    req: TStringStream;
    strings: TStringList;
begin
try
 
    strings := TStringList.Create;
    XMlDoc.XML.LoadFromFile('weather.xml');
    strings.AddStrings(XMlDoc.XML);

    HttpClient.Request.URL := 'http://www.webservicex.net/WeatherForecast.asmx';
    HttpClient.Request.Accept := 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2';
    HttpClient.Request.ContentType := 'application/soap+xml;charset=iso-8859-1;action="urn:sendblabla"';
    req := TStringStream.Create(strings.GetText);

    try
      str := HttpClient.Post(HttpClient.Request.URL , req);

    except
      On E: EIdHTTPProtocolException do
      begin
        err := 'HTTP-Fehler: ' + E.Message;
        str := E.ErrorMessage;
      end;
      On E: Exception do
        err := 'Allgemeiner Fehler: ' + E.Message;
    end;
finally
  strings.free;
end;
  Result := str;
end;
Hier der request in weather.xml:
Code:
<?xml version='1.0' encoding='iso-8859-1'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net">
   <soapenv:Header/>   
   <soapenv:Body>
      <web:GetWeatherByPlaceName>
         <web:PlaceName>London</web:PlaceName>
      </web:GetWeatherByPlaceName>      
   </soapenv:Body>
</soapenv:Envelope>

Nutze ich nun fast den selben Code für einen HTTPS Webservice bekomme ich immer die Fehlermeldung Soecketerror #0:
Mein Code dafür sieht so aus:

Code:
var err, str: string;
    req: TStringStream;
    strings, header: TStringList;
    SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL;

begin
try
    SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(self);
    with SSLIOHandler do
    begin
      SSLOptions.Mode := sslmClient;
      SSLOptions.Method := sslvSSLv3;
      SSLOptions.VerifyMode := [];
      SSLOptions.VerifyDepth := 0;

    end;
     HttpClient.IOHandler := SSLIOHandler;

    header := TStringList.Create;
    header.LoadFromFile('header.txt');
    HttpClient.Request.RawHeaders.Assign(header);

    strings := TStringList.Create;
    XmlDoc.XML.LoadFromFile('hsst.xml');
    strings.AddStrings(XmlDoc.XML);

    HttpClient.BoundPort := 443;

    HttpClient.Request.URL := 'https://******************/webservice/********Service';
    HttpClient.Request.Accept := 'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2';
    HttpClient.Request.ContentType := 'application/soap+xml;charset=iso-8859-1;action="urn:sendBlabla"';

    req := TStringStream.Create(strings.GetText);

    str := HttpClient.Post(HttpClient.Request.URL , req);


except
      On E: EIdHTTPProtocolException do
      begin
        err := 'HTTP-Fehler: ' + E.Message;
        str := E.ErrorMessage;
      end;
      On E: Exception do
        err := 'Allgemeiner Fehler: ' + E.Message;


end;

   strings.free;
   header.Free;
   SSLIOHandler.Free;
   mmo2.Text := str;
end;
Die header.txt sieht so aus:
Code:
POST https://********/webservice/*********** HTTP/1.1
Content-type: text/xml;charset="utf-8"
Authorization: Basic ***************==
Soapaction: "http://***********.de/abrufen*****"
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Host: **********:443
Connection: keep-alive
Content-Length: 719
Anzumerken ist noch, dass der Webservice http Basic Authentifizierung erfordert, deshalb wurde in der header.txt auch Autorization base64 codiert.
Die hsst.xml beinhaltet hier die Soap-Nachricht, jedoch stimmt diese 100%, deshalb liste ich diese mal hier nicht auf.

Hat jemand einen Rat warum es nicht funktioniert? Muss ich bei SSL und Webservices noch etwas beachten?

Das interessante ist, dass ich den Service mit dem Tool SoapUI proplemlos nutzen kann.
Ich weiß ist etwas viel, aber sitz jetzt schon 2 Tage dran und komm nicht mehr weiter.

Wäre nett, wenn mir jemand helfen könnte.
Vielen Dank.
mc
  Mit Zitat antworten Zitat
 


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 21:09 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