【发布时间】:2022-01-11 01:57:26
【问题描述】:
LWP::UserAgent 使用我们向端点发送请求,该端点以HTTP/1.1 200 OK 或HTTP/1.1 200 200 发送响应。我使用模式匹配来检查响应状态。
但我正在考虑使用一些通用函数来检查响应状态,而不是在 HTTP STATUS 中进行模式匹配。下面是我的代码。
use LWP::UserAgent;
my $ua = LWP::UserAgent->new( );
$ua->timeout(30);
my $req = HTTP::Request->new(POST => "$EndPoint");
$req->content_type('text/xml');
$req->content($send_data);
my $response = $ua->request($req);
my $http_status = '';
if ( $response =~ m/^HTTP.*?\s(.*)/ ) {
$http_status = uc($1); # It is probably already upper case -- just making sure.
}
if ( $http_status =~ m/200/ ) {
if ( $response =~ m/Status=\"Successful\"/ ) {
print "Successful\n";
} else {
my $error_code = '';
if ( $response =~ m/Error Code=\"(.+?)\"/ ) {
print "Error: $1 \n";
}
}
我尝试使用以下代码检查状态,但收到错误Can't locate object method "is_success" via package "HTTP/1.1 200 OK
if($response->is_success){
print Dumper($response);
} else {
print Dumper($response->status_line);
}
编辑
perl send_request.pl
Can't locate object method "is_success" via package "HTTP/1.1 200 OK
##我在 $response 上添加了一个打印件
Connection: close
Date: Mon, 10 Jan 2022 17:36:58 GMT
Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Server: Apache
Vary: Accept-Encoding
Content-Length: 356
Content-Type: text/xml;charset=utf-8
Client-Date: Mon, 10 Jan 2022 17:36:58 GMT
Client-Peer: XXXXX
Client-Response-Num: 1
SOAPAction: ""
【问题讨论】:
-
我是 LWP 的维护者。这可能是 LWP::UserAgent 中的一个错误。
$ua->request应该返回一个 HTTP::Response 对象。我认为理想情况下,您会在github.com/libwww-perl/libwww-perl/issues 上提出票证并添加更多详细信息,例如您正在运行哪个版本的 LWP::UserAgent,以及您发送的请求的响应正文(或至少是标头)是什么.谢谢。 -
Re "Can't locate object method "is_success" via package",不,在您发布的代码中使用
$response->is_success不会导致该错误。跨度> -
请停止添加虚假信息。您已经有一个无法运行的程序,现在您添加了无法获得的输出。请编辑您的问题以包含问题的实际演示。如果您发布的内容是虚构的,我们将无法帮助您。
-
Re "你是什么意思?",你发布的代码不是你运行的代码。它不包括导致您遇到您所询问的错误的错误。你发布的输出不是你得到的输出。 (输出部分已被修复。)
-
Re "我不知道你想要什么证明",一个实际输出
Can't locate object method "is_success" [...]的程序,供初学者使用。见minimal reproducible example。 // Re "但这不是编造的",请不要说谎。这不是你运行的程序。它甚至不包括$response->is_success!
标签: perl