1

当我得到答案时,我可能会发布更多问题,但这里有!

我目前正在尝试对我的大学用来自动下载包含 SAT 分数数据的文件的 Perl 脚本进行故障排除。

这个想法是阅读某个帐户中的电子邮件;拉出循环编号(在 URL 中使用);拼凑多个网址;然后用于LWP::UserAgent从服务器上抓取文件并对它们执行其他 Perl 魔术。

在我的调查中,我确定手动输入 URL(从而限制用户运行的脚本,每次都替换循环号)确实有效。

在检查发回的响应对象时,我注意到(首先)失败的请求中缺少以下行:

'_uri_canonical' => $VAR1->{'_request'}{'_uri'}

但是它存在于成功的请求中。

如果你们中的任何人能告诉我为什么在不成功的请求中缺少这条线,你们会感谢我的,但这不是我要问的。

我的问题与进一步调查有关,以了解它被拒绝的原因。

在文档中LWP::UserAgent我注意到了这一点:

LWP 内部生成的错误响应会将“Client-Warning”标头设置为值“Internal response”。如果您需要将这些内部响应与远程服务器实际生成的响应区分开来,则需要测试此标头值。

我的问题:您如何实际测试该标头值?(请原谅任何无知;我是大学 IT 部门的实习生)

4

2 回答 2

2

它实际上在该标头中放置了各种消息,您可以通过以下方式获取这些消息:

if (my $cw = $response->header('Client-Warning')) {
   die("Internal error: $cw\n");
}

Internal response消息仅在状态已指示错误时使用。其他消息,例如Redirect loop detectedMissing Authenticate header在其他时间使用。上面的代码将获取那里存在的任何消息,而不仅仅是检查Internal response.

于 2013-03-07T19:56:53.947 回答
1

标准的使用方式LWP是这样的

use strict;
use warnings;

use LWP;

my $ua = LWP::UserAgent->new;

my $resp = $ua->get('http://my.domain.co.uk/');

die $resp->status_line unless $resp->is_success;

my $content = $resp->decoded_content;

你需要了解什么?

于 2013-03-07T20:47:31.690 回答