Использование Perl LWP :: UserAgent с XML, для которого требуются имена пользователя и пароли для подключения - PullRequest
0 голосов
/ 24 января 2012

ОК ... Я пытаюсь опубликовать страницу XML на сайте стратегического партнера, чтобы он выполнил некоторые вычисления и вернул мне код ответа, снова через XML.

Я использую PERL для садового сорта и пытался использовать LWP :: UserAgent для этого ... если есть более элегантный способ, пожалуйста, укажите мне в этом направлении.

Я могу подключиться к их серверу и получить код обратно ... но он запрещает доступ к их серверу, потому что ожидаемое имя пользователя и пароль неверны. Имя пользователя и пароль не указаны в фактическом XML-коде, его предполагается передавать на сервер как часть фактического метода POST ... но я понятия не имею, как это сделать.

Партнер дает следующий отзыв:

замена YOUR_XML_FILE, YOUR_USER и YOUR_PASSWORD его xml который генерируется, и его комбинация имени пользователя и пароля. это должно быть сделано с сервера, чтобы у него был свой Perl-скрипт.

wget --no-check-Certificate --post-file YOUR_XML_FILE https://previewtest.clverify.com/webservice/exec -O previewsamplerequest.response.xml --http-user = YOUR_USER --http-пароль = ваш_пароль

Я не знаю, где это должно быть сгенерировано, или какие параметры есть в LWP :: UserAgent, чтобы указать их. Кто-нибудь делал это раньше?

Вот мой код:

sub ConsumerInfo {
my $cid = shift;

my $response = undef;
my $sendXML = &Create_ConsumerInfo_Request($cid);
if ($sendXML) {
    &DoXMLUpload($sendXML);

    my $browser = LWP::UserAgent->new(agent => 'perl post');
    $browser->credentials('','','username','p@ssword');
    $response = $browser->request(POST 'https://previewtest.clverify.com/webservice/exec',
        Content_Type => 'text/xml',
        Content => $sendXML);
    print "Content-type:text/html\n\n";
    print $response->error_as_HTML unless $response->is_success;
    print $response->as_string;

} else {
    &ErrorMsg("No XML Code Was Found.");
    exit;   
}
# ===============================================================
# Need to insert parser in here to convert this into an array.
# ===============================================================
return $response;
}

1 Ответ

2 голосов
/ 24 января 2012

ВНИМАНИЕ: Вы указали реальный URL и пароль.Измените это как можно скорее, так как каждый может подключиться к серверу вашего партнера сейчас !!

Imho, это можно найти в документации:

$ ua-> учетные данные ($ netloc, $ realm, $ uname, $ pass)
Получить / установить имя пользователя и пароль, которые будут использоваться для области.$ Netloc - это строка вида ":".Имя пользователя и пароль будут переданы только на этот сервер.

В примере показан правильный способ аутентификации:

$ua->credentials("www.example.com:80", "Some Realm", "foo", "secret");

В вашем случае это будетзначит:

$browser->credentials('previewtest.clverify.com:443','yourRealm','321321','Eep789SHag@');
...