当我得到答案时,我可能会发布更多的问题,但是这里开始!
我目前正在尝试解决一个Perl脚本,我的大学曾经使用它来自动下载带有SAT分数数据的文件。
这个想法是阅读特定帐户中的电子邮件;提取循环号(在URL中使用);拼凑多个url;然后使用LWP::UserAgent
从服务器获取文件,并对它们执行其他Perl操作。
在我的调查中,我已经确定手动输入URL(从而限制脚本由用户运行,每次替换循环号)实际上是有效的。
在检查返回的响应对象时,我注意到(首先)在失败的请求中缺少以下行:
'_uri_canonical' => $VAR1->{'_request'}{'_uri'}
但是它存在于成功的请求中。
如果你们中有谁能告诉我为什么不成功的请求中缺少这一行,我会感谢你的,但这不是我想问的。
我的问题是要进一步调查,看看为什么它被拒绝了。
在LWP::UserAgent
的文档中,我注意到:
LWP内部生成的错误响应将有"Client-Warning"头设置为值"Internal response"。如果您需要将这些内部响应与远程服务器实际生成的响应区分开来,则需要测试此头值。
我的问题:你如何实际测试头值?(原谅我的无知;我是学校IT系的实习生)
它实际上在标题中放置了各种消息,您可以通过以下方式获得:
if (my $cw = $response->header('Client-Warning')) {
die("Internal error: $cwn");
}
Internal response
仅在状态已经显示错误时使用。其他消息,如Redirect loop detected
和Missing Authenticate header
在其他时间使用。上面的代码将得到任何出现在那里的消息,而不仅仅是检查Internal response
。
使用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;
你需要知道什么?