Как интегрировать аутентификацию NTLM с модулем Perl SOAP :: Lite? - PullRequest
4 голосов
/ 18 июня 2009

Этот код Perl работает с анонимным доступом к веб-службе ASP.NET, но когда включена встроенная защита, служба возвращает 401 ошибок. Я думаю, что мне нужно использовать модуль NTLM в сочетании с SOAP :: Lite, но не совсем понятно, как это сделать. Как можно интегрировать эти компоненты?

use SOAP::Lite;
use strict;

my $proxy = "http://localhost:28606/WebService.asmx";

my $method_name = "HelloWorld";
my $uri = "http://tempuri.org/";
my $methodAction = $uri . $method_name;

my $soap = SOAP::Lite
    ->uri( $uri )
    ->proxy( $proxy )
    ->on_action(sub{ $methodAction; });

my $method = SOAP::Data->name($method_name)->attr({xmlns=>$uri});
my $result = $soap->call($method);

print $result->result();

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Вы можете заставить SOAP :: Lite распечатать некоторые отладочные данные, если вы сделаете:

use SOAP::Lite +trace;

вместо

use SOAP::Lite;

EDIT:

Хорошо, я думаю, я понял это сейчас. Включение встроенной функции безопасности заставляет IIS требовать проверки подлинности NTLM. На perlmonks.org есть нить , которая, похоже, раскрывает ответ.

1 голос
/ 27 декабря 2009

Я немного опоздал, но я столкнулся с той же проблемой. Попробуйте это:

use LWP::UserAgent;
use LWP::Debug;
use SOAP::Lite on_action => sub { "$_[0]$_[1]"; };
import SOAP::Data 'name', 'value';
our $sp_endpoint = 'http://sp.example.com/sites/mysite/_vti_bin/lists.asmx';
our $sp_domain = 'sp.example.com:80';
our $sp_username = 'DOMAIN\username';
our $sp_password = 'xyz';

if ($debug) {
    LWP::Debug::level('+');
    SOAP::Lite->import(+trace => 'all');
}

my @ua_args = (keep_alive => 1);
my @credentials = ($sp_domain, "", $sp_usernam, $sp_password);
my $schema_ua = LWP::UserAgent->new(@ua_args);
$schema_ua->credentials(@credentials);
$soap = SOAP::Lite->proxy($sp_endpoint, @ua_args, credentials => \@credentials);
$soap->schema->useragent($schema_ua);
$soap->uri("http://schemas.microsoft.com/sharepoint/soap/");
...