2016-06-28 5 views
0

Wir haben die unten xml gegeben und müssen in Perl übersetzen.Soap :: Lite Perl Grundlegende Abfrage

POST /carrierintegrationapi.asmx HTTP/1.1 
Host: carrierintegrationapi.3tlogistics.net 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "https://carrierintegrationapi.3tlogistics.net/Login" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <CiSoapHeader xmlns="https://carrierintegrationapi.3tlogistics.net/"> 
     <Username>cccict</Username> 
     <Password>xxxxxx</Password> 
     <AuthenticationToken>string</AuthenticationToken> 
    </CiSoapHeader> 
    </soap:Header> 
    <soap:Body> 
    <Login xmlns="https://carrierintegrationapi.3tlogistics.net/" /> 
    </soap:Body> 
</soap:Envelope>'; 

Unser Versuch:

my $service = SOAP::Lite 
      -> service ('https://carrierintegrationapi.3tlogistics.net/carrierintegrationapi.asmx'); 

my $AuthHeader = SOAP::Header->new(
    name =>'AuthenticationHeader', 
    attr => { xmlns => "https://carrierintegrationapi.3tlogistics.net/" }, 
    value => {Username => 'cccict', Password => 'xxxxxx' }, 
); 
my $result = $service->GetIt($AuthHeader); 

Wir bekommen nicht übereinstimmen Tag in parser.pm?

+0

@Ehsan Bitte fügen Sie nicht "Danke für Ihre Zeit: D" zu Fragen. Es ist unnötiger Lärm und gehört nicht in Beiträge. Bitte verwenden Sie auch keine Inline-Code-Formatierung für Dinge, die kein Code sind, wie "xml" (was sowieso "XML" sein sollte). – ThisSuitIsBlackNot

Antwort

0

Da es bisher keine Antwort gibt, werde ich Ihnen eine Alternative zeigen. Sie können die Anfrage als Rohpost senden. SOAPAction kann in der Kopfzeile deklariert werden. Das Kompilieren der richtigen SOAP mit SOAP :: Lite ist zeitintensiv und verschachtelte Elemente sind schwer zu lesen. Das Beispiel unterstützt auch den nicht blockierenden Aufrufstil mit einer kleinen Änderung.

use Mojo::UserAgent; 
use strict; 
use warnings; 

# User-Agent 
my $ua = Mojo::UserAgent->new; 

my $username = 'Username'; 
my $password = 'Password'; 
my $authtoken = 'Token'; 

my $message = <<"SOAP_REQUEST"; 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <CiSoapHeader xmlns="https://carrierintegrationapi.3tlogistics.net/"> 
     <Username>$username</Username> 
     <Password>$password</Password> 
     <AuthenticationToken>$authtoken</AuthenticationToken> 
    </CiSoapHeader> 
    </soap:Header> 
    <soap:Body> 
    <Login xmlns="https://carrierintegrationapi.3tlogistics.net/" /> 
    </soap:Body> 
</soap:Envelope> 
SOAP_REQUEST 

my $tx = $ua->post('https://carrierintegrationapi.3tlogistics.net/carrierintegrationapi.asm' => { 'Hello' => "I'm a Header" } => $message); 
print $tx->res->body; 
+0

Hallo, danke für deine Hilfe. Es gibt einen Syntaxfehler in dieser Zeile. mein $ ua = Mojo :: UserAgent -> neu; – cccict

+0

Sie müssen Mojo :: UserAgent über CPAN installieren. Geben Sie Ihre Shell ein "cpan install Mojo :: UserAgent". – user3606329