6 Stimmen

Perl SOAP::Lite und Service-Beschreibung zum Request-Objekt

Ich benutze SOAP::Lite in Perl, um auf einen entfernten Webdienst zuzugreifen, der durch eine WSDL definiert ist. Das bedeutet, dass ich folgendes habe:

use strict;
use Data::Dumper;
use SOAP::Lite +trace => 'debug';

my $service = SOAP::Lite->service('http://path/wsdl');

Bisher alles gut. Das Problem ist, dass ich Zugriff auf das HTTP::Request-Objekt benötige, um benutzerdefinierte HTTP-Anforderungsheader zu senden (und ich meine nicht Authentifizierungsheader). Es scheint, als könnte ich auf das Anforderungsobjekt zugreifen, nachdem ein erfolgreicher Aufruf durchgeführt wurde:

my $result = $service->getClient('parameters');
print Dumper($service->transport->http_request);

Das gibt mir das korrekte HTTP::Request-Objekt:

$VAR1 = bless( {
             '_content' => '',
             '_uri' => undef,
             '_headers' => bless( {}, 'HTTP::Headers' ),
             '_method' => undef
           }, 'HTTP::Request' );

Wenn ich versuche, auf das Anforderungsobjekt zuzugreifen, bevor ein automatischer Aufruf (der Teil $service->getClient) erfolgt, ist das Transportobjekt leer und ich habe keine Möglichkeit, die Anforderung zu modifizieren. Es scheint, als würde alles gut funktionieren, wenn ich den SOAP::Lite->proxy-Weg gehen würde -- aber das macht die Nützlichkeit einer vordefinierten Servicedefinition zunichte.

Irgendwelche Ideen, wie ich auf das Anforderungsobjekt aus einer Servicedefinition zugreifen soll, ohne zuerst einen Aufruf zu machen? Ein echtes Huhn-und-Ei-Problem...

Danke!

1voto

asdf Punkte 11

Was ich versuche zu erreichen, ist den Transport zu füllen, bevor ich den Serviceaufruf durchführe.

Und genau das machst du, indem du den entsprechenden Handler hinzufügst, denn der Transport ist nicht leer

0voto

vayay Punkte 86

Fügen Sie dem Transport einen Handler hinzu. Siehe LWP::Debug zum Beispiel, siehe LWP::UserAgent für die Dokumentation oder perlmonks.org/?node_id=904166 zum Beispiel

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X