use SOAP::Lite +trace; $uri = 'urn:Foo'; $proxy = 'http://localhost/'; $username = 'username'; $password = 'password'; my $client = SOAP::Lite ->readable(1) ->uri($uri) ->proxy($proxy); $client->autotype(0); my $Username = SOAP::Header->name('Username' => $username); my $Password = SOAP::Header->name('Password' => $password); my $UsernameToken = SOAP::Header->name('UsernameToken') ->value(\SOAP::Header->value($Username, $Password)); my $security = SOAP::Header->name('Security') ->attr({'xmlns' => 'http://schemas.xmlsoap.org/ws/2002/xx/secext'}) ->value(\$UsernameToken); $elem1 = SOAP::Data->name('ELEM1' => "value1"); $elem2 = SOAP::Data->name('ELEM2' => "value2"); $response = $client->mymethod($elem1,$elem2, $security);