AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi PHP konforme SOAP Header erzeugen, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

PHP konforme SOAP Header erzeugen, wie?

Ein Thema von kaju74 · begonnen am 15. Okt 2012 · letzter Beitrag vom 17. Okt 2012
 
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#1

PHP konforme SOAP Header erzeugen, wie?

  Alt 15. Okt 2012, 15:25
Hallo,

ich suche mir hier jetzt schon n' Wolf ab, aber finde nichts dazu...also:

Ich muss einen PHP-WebService ansprechen, der mittels SOAP-Header eine einfache Authorisierung verlangt. Ein PHP-Client kann sich wunderbar am Service autorisieren, nur unter Delphi bekomme ich es nicht gebacken. Der relevante Code des PHP-Clients sieht so aus:

Code:
class BasicAuth
{
  private $username;
  private $password;

  public function __construct($username, $password)
  {
    $this->username = $username;
    $this->password = $password;
  }
}

// create basic authentication
$basicAuth = new BasicAuth('admin', '12345');

// expand soap header w/ basic auth
$soapHeaders[] = new SoapHeader(WEBSERVICE_NAMESPACE, 'authenticate', $basicAuth);

// create soap client...
$soap_client = new SoapClient(
  WEBSERVICE_URI . '/' . WEBSERVICE_PATH . '?wsdl',
  array(
    'trace' => 1,
    'exceptions' => true
  )
);

// ...and append own headers
$soap_client->__setSoapHeaders($soapHeaders);
Wenn ich jetzt in Delphi die WSDL importiere, ist ein Zugriff auf die Header ja noch nicht drin. Also müsste man wohl ein eigenes RIO-Objekt erstellen...in etwa so:

Code:
type
  TBasicAuth = class(TSOAPHeader)
  private
    FUsername: AnsiString;
    FPassword: AnsiString;
  public
    property Username: AnsiString read FUsername write FUsername;
    property Password: AnsiString read FPassword write FPassword;
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  RIO: THTTPRIO;
  Header: TBasicAuth;
begin
  RIO := THTTPRIO.Create(nil);

  Header := TBasicAuth.Create;
  Header.Username := 'admin';
  Header.Password := '12345';

  RIO.SOAPHeaders.Send(Header);
  RIO.SOAPHeaders.SetOwnsSentHeaders(True);

  ...

  MyService(False, '', RIO).myFunction(...);
end;
Das Problem an dieser Stelle ist, das ich wohl dem SOAP-Header keinen Namen mitgeben kann - wie in PHP:

Code:
$soapHeaders[] = new SoapHeader(WEBSERVICE_NAMESPACE, 'authenticate', $basicAuth);
Hier wäre der Name "authenticate", der dann im SOAP-Server über den HTTP/SOAP-Header explizit aufgerufen wird:

Code:
  public function authenticate($authValues)
  {
    $this->auth = ($authValues->username == 'admin') && ($authValues->password == '12345');
  }
Da ich aber in Delphi nicht weiß, wie ich diesen Namen übergeben kann, ruft der Server die ensprechende Methode gar nicht erst auf, und die Anmeldung schlägt fehl.

Weiß einer Rat??

Danke & Gruß,
Marc
  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 05: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