Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Soap::Lite Authentication

by Anonymous Monk
on May 16, 2006 at 20:50 UTC ( #549890=perlquestion: print w/ replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

The soap service that I'm trying to connect to has implemented a username and password layer:
<soap:Header> <AuthenticationHeader xmlns="http://www.server.com/"> <username>string</username> <password>string</password> </AuthenticationHeader> </soap:Header>
I've got working c# (shudder) code:
DataSet ds = new DataSet(); theGeoData.AuthenticationHeader auth = new theGeoData.Authenticati +onHeader(); theGeoData.GetData theAd = new theGeoData.GetData(); auth.username = "user"; auth.password = "pass"; theAdds.AuthenticationHeaderValue = auth; ds = theAdds.GetIt();
But my perl code won't authenticate, in fact I get nothing back. I've tried passing the user:pass in the url, and I've tried it with the Transport sub. My code is below. I keep getting the error "Can't call method "GetData" on an undefined value"
sub SOAP::Transport::HTTP::Client::get_basic_credentials { return 'username' => 'user'; return 'password' => 'pass'; }
and
-> service('http://user:pass@server/GetData.asmx?WSDL');
My soap code:
eval { $service = SOAP::Lite -> service('http://server/GetData.asmx?WSDL'); }; #|| ($_); # $@ will have the error message, perldoc -f eval $service -> GetData(); my $som = $service -> call || &soapGetBad();

Comment on Soap::Lite Authentication
Select or Download Code
Re: Soap::Lite Authentication
by borisz (Canon) on May 16, 2006 at 22:41 UTC
    try:
    sub SOAP::Transport::HTTP::Client::get_basic_credentials { return username => 'password'; }
    Boris
Re: Soap::Lite Authentication
by Thelonius (Curate) on May 17, 2006 at 01:30 UTC
    The most important thing here is that you're not checking $@. Using eval and then throwing away $@ means you've lost the most important clue as to what's going on!

    It looks like the service is not using basic authentication, but Soap Header authentication.

    I think the code is going to look something like this:

    use SOAP::Lite; use strict; my $service = SOAP::Lite -> service('http://server/GetData.asmx?WSDL'); my $AuthHeader = SOAP::Header->new( name =>'AuthenticationHeader', attr => { xmlns => "http://www.server.com/" }, value => {username => 'user', password => 'pass' }, ); my $result = $service->GetIt($AuthHeader);
    Without seeing the WSDL, I can't be sure--not that I'm a SOAP expert.
      Hi, If i want to pass both Header and body to an webservice how do i do that.

        Odd question since that is what all the SOAP:: modules are there to do, pass both header and body ... a proper SOAP request, so you don't have to reinvent any wheels. Use SOAP::Simple or its daddy XML::Compile

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://549890]
Approved by wazoox
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (6)
As of 2014-08-21 08:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (128 votes), past polls