Einzelnen Beitrag anzeigen

mcbain

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

AW: Webservice + SSL + D2010

  Alt 14. Sep 2011, 10:26
So, ich habe nun eine Lösung für mein Problem gefunden.
Ich habe nun ganz auf die Indy-Komponenten verzichtet. Die einzige Komponente ist ein HTTPRio.

Hier der Code:

Code:
...
uses ... Rio, SOAPHTTPClient, WinInet , SOAPHttpTrans, EncdDecd, ...
...

procedure TForm2.rioHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; //Fügt den benötigten HTTP-Header hinzu für die Basic-Authentication
  Data: Pointer);
var
  S: String;
begin
  S := 'Authorization: Basic **************==';               //HTTP-Basic-Authorization-Header
  HttpAddRequestHeaders(Data, PChar(S), Length(S), HTTP_ADDREQ_FLAG_ADD);

end;


procedure TForm2.Button1Click(Sender: TObject);
var request, response: TStringStream;
    strings: TStringList;
    str: string;
    recieveID: integer;
begin
  rio.HTTPWebNode.URL := 'https://********************/webservice/***************Service';    //URL des Webservices
  rio.HTTPWebNode.SoapAction := 'http://**************/abrufen*************************';  //URL der aufzurufenden Methode
  rio.HTTPWebNode.Agent := 'Mozilla';
  rio.Port := '443';

  try

    strings := TStringList.Create;
    strings.LoadFromFile('request.xml');  //Hier ist der XML-request enthalten
 
    request := TStringStream.Create(strings.GetText);
    response := TStringStream.Create('');

    recieveID := rio.HTTPWebNode.Send(request);           //Request

    rio.HTTPWebNode.Receive(recieveID,response,false);    //Response
 
    response.Position := 0;
    mmo2.Lines.LoadFromStream(response, TEncoding.UTF8);

  finally
     strings.Free;
     request.Free;
     response.Free;
  end;

end;
Als kleine Anmerkung, in der Unit EncdDecd sind Funktionen für die Base64 Kodierung/Enkodierung enthalten. Damit kann man für HTTP Autorization Header den Usernamen und Passwort umwandeln.

Ich hoffe, ich konnte jemandem damit helfen.

Vielen Dank an Sebastian.

Geändert von mcbain (14. Sep 2011 um 10:37 Uhr)
  Mit Zitat antworten Zitat