【问题标题】:Why don't my LWP::UserAgent credentials work?为什么我的 LWP::UserAgent 凭据不起作用?
【发布时间】:2010-12-20 10:14:18
【问题描述】:

我正在尝试访问受保护的文件。服务器正在使用摘要身份验证 - 我可以从打印出的响应中看到。 下面是示例代码:

use LWP;
use strict;

my $url = 'http://somesite.com/aa/bb/cc.html';
my $username = 'scott';
my $password = 'tiger';

my $browser = LWP::UserAgent->new('Mozilla');
$browser->credentials("http://somesite.com:80","realm-name",$username=>$password);
my $response=$browser->get($url);

print $response->content;

当我尝试从浏览器访问该资源时,我从弹出窗口中获得的领域名称。相同的用户名和密码在浏览器中工作得非常好,我可以看到内容,但是当我运行上面的脚本时,它总是显示401 Authorization required

LWP 是如何工作的?

我是否需要让 LWP 发送用户名和密码的 MD5 哈希(摘要),或者它是否像内部一样检查要使用的身份验证并发送相应的(基本/摘要)发送凭据的方式。 我的问题是

  1. 如何设置 LWP 以发送用户名和密码摘要?
  2. 如果服务器使用 Windows NTLM 身份验证协议怎么办?遇到这种情况该怎么办?

非常感谢任何快速帮助!

【问题讨论】:

  • 尝试从"http://somesite.com:80"中删除端口号。
  • 这不是端口,但应该删除 http:// - 谢谢 Ivan

标签: perl lwp lwp-useragent


【解决方案1】:

考虑以下来自LWP::UserAgent 模块文档的摘录:

$ua->credentials( $netloc, $realm )
$ua->credentials( $netloc, $realm, $uname, $pass )

获取/设置用于领域的用户名和密码。

$netloc"<host>:<port>" 形式的字符串。用户名和密码将仅传递到此服务器。示例:

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

改变

$browser->credentials("http://somesite.com:80","realm-name",$username=>$password);

$browser->credentials("somesite.com:80","realm-name",$username=>$password);

【讨论】:

  • 谢谢....gbacon... 在凭证主机中删除“http://”解决了这个问题。太感谢了。无论如何,我们说的是 80 号端口,所以我们不需要说 http 我猜
【解决方案2】:

HTTP GET Authed Request 也可以如下进行

use LWP::UserAgent;

my $address = "localhost";
my $port = "8080";
my $username = "admin";
my $pass = "password";

my $browser = LWP::UserAgent->new;
my $req =  HTTP::Request->new( GET => "http://$address:$port/path");
$req->authorization_basic( "$username", "$pass" );
my $page = $browser->request( $req );

【讨论】:

  • 即使服务器未在 401 响应中提供领域名称,此方法似乎也有效。
【解决方案3】:

当您遇到此类问题时,请使用 HTTP 嗅探器来监视事务,以便查看程序正在发送的标头。在这种情况下,您可能根本没有发送凭据,因为 HTTP 状态是 401 而不是 403。这通常意味着您的凭据有误,如 gbacon notes in his answer

【讨论】:

    【解决方案4】:

    我通过在 Red Hat 7 上安装 perl-NTLM.noarch 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2011-09-24
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多