【问题标题】:How to get http and https return code in perl如何在 perl 中获取 http 和 https 返回码
【发布时间】:2014-06-02 17:40:22
【问题描述】:

我是 perl 新手,任何帮助将不胜感激!

我必须通过 perl(在 unix 机器上)调用一些 URL。URL 既是 http 又是 https

如果 URL 被成功调用,那么它很好,否则创建一个日志文件说明无法调用 URL。

对于调用 URL,我正在考虑使用例如

  exec 'firefox http://www.yahoo.com';

但是如何获取http和https的请求状态码呢?如果状态为 200,则 ok else error..

请帮忙!!

【问题讨论】:

  • 这行不通。您应该改用 Perl HTTP::Client 模块(或 LWP)。这将允许您检查返回代码,但不会向用户显示任何 UI。您真的需要启动整个浏览器吗?请更清楚地解释您要完成的工作。
  • 听起来你正在尝试重新创建checkbot
  • 谢谢吉姆。我不希望启动任何浏览器..只想检查是否调用了 URLS 列表..它可能在后台发生..我只需要返回码..即如果返回码=200,则成功,否则失败。

标签: perl http https


【解决方案1】:

您应该使用 HTTP 客户端库,例如 HTTP::TinyLWP::UserAgent,而不是使用 Firefox 等浏览器。

例如:

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

use HTTP::Tiny;

my $Client = HTTP::Tiny->new();

my @urls = (
    'http://www.yahoo.com',
    'https://www.google.com',
    'http://nosuchsiteexists.com',
);

for my $url (@urls) {
    my $response = $Client->get($url);
    say $url, ": ", $response->{status};
}

哪些输出:

alex@yuzu:~$ ./return_status.pl 
http://www.yahoo.com: 200
https://www.google.com: 200
http://nosuchsiteexists.com: 599

如果您想正确识别重定向状态代码 (3XX),您必须将 max_redirect 参数设置为 0。

alex@yuzu:~$ perl -MHTTP::Tiny -E 'say HTTP::Tiny->new(max_redirect => 0)->get("http://www.nestoria.co.uk/soho")->{status};'
301

如果您只关心成功,则响应 hashref 包含一个“成功”字段,成功时为真,失败时为假。

alex@yuzu:~$ perl -MHTTP::Tiny -E 'say HTTP::Tiny->new()->get("http://www.google.com")->{success};'
1

【讨论】:

  • 谢谢 Kaoru..我是 perl 的新手。我必须下载 HTTP::Tiny 的 tarball 并解压?你能告诉我下载的位置吗?
  • 嗨 @user2150950 - 我选择 HTTP::Tiny 是因为它自 Perl 5.13.9 以来一直是“核心” Perl 模块,所以如果您使用的是最新版本的操作系统,我希望您拥有它已经可用。如果您选择的 Linux 发行版没有附带 HTTP::Tiny,我相信他们会在他们的存储库中拥有它。例如:“# yum install perl-HTML-Tiny”或“# apt-get install libhttp-tiny-perl”
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2011-07-21
相关资源
最近更新 更多