使用Perl LWP :: UserAgent和XML,需要用户名和密码进行连接

时间:2012-01-24 16:53:55

标签: perl cgi lwp-useragent

好的......我正在尝试将XML页面发布到战略合作伙伴的网站,以便他们进行一些计算并再次通过XML返回响应代码。

我正在使用花园式PERL,并且正在尝试使用LWP :: UserAgent来执行此操作...如果有更优雅的方式,请指出我的方向。

我能够点击他们的服务器并获得代码...但它拒绝访问他们的服务器,因为它所期望的用户名和密码不正确。用户名和密码没有在实际的XML代码中指定,它应该作为实际POST方法的一部分传递给服务器......但我不知道如何做到这一点。

合作伙伴提供以下反馈:

  

用他的xml替换YOUR_XML_FILE,YOUR_USER和YOUR_PASSWORD   生成的,以及他的用户名/密码组合。这个   应该从他有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-密码= YOUR_PASSWORD

我不知道应该在哪里生成它,或者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 个答案:

答案 0 :(得分:2)

警告: 您提供了真实的网址和密码。尽快更改此内容,因为现在每个人都可以连接到您的合作伙伴的服务器!!

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@');