1

我正在尝试将我系统上的整个网页保存为一个.html文件,然后解析该文件,以找到一些标签并使用它们。

我能够保存/解析http://<url>,但无法保存/解析https://<url>。我正在使用 Perl。

我正在使用以下代码保存 HTTP,它工作正常,但不适用于 HTTPS:

use strict; 
use warnings; 
use LWP::Simple qw($ua get);
use LWP::UserAgent;
use LWP::Protocol::https;
use HTTP::Cookies;

sub main
{
  my $ua = LWP::UserAgent->new();

  my $cookies = HTTP::Cookies->new(
    file => "cookies.txt",
    autosave => 1,
    );
 
  $ua->cookie_jar($cookies);
 
  $ua->agent("Google Chrome/30");
 

#$ua->ssl_opts( SSL_ca_file => 'cert.pfx' );

  $ua->proxy('http','http://proxy.com');
  my $response = $ua->get('http://google.com');

#$ua->credentials($response, "", "usrname", "password");
 
  unless($response->is_success) {
    print "Error: " . $response->status_line;
    }
 
         
    # Let's save the output.
  my $save = "save.html";
 
  unless(open SAVE, '>' . $save) {
    die "nCannot create save file '$save'n";
  }
 
    # Without this line, we may get a
    # 'wide characters in print' warning.
  binmode(SAVE, ":utf8");
 
  print SAVE $response->decoded_content;
 
  close SAVE;
 
  print "Saved ",
      length($response->decoded_content),
      " bytes of data to '$save'.";
}

main();

是否可以解析 HTTPS 页面?

4

2 回答 2

5

总是值得检查您正在使用的模块的文档......

您正在使用libwww-perl中的模块。这包括一本食谱。在那本食谱中,有一个关于 HTTPS 的部分,上面写着:

使用 https 方案的 URL 的访问方式与使用 http 方案的方式完全相同,前提是已正确安装了 LWP 的 SSL 接口模块(有关更多详细信息,请参阅 libwww-perl 发行版中的 README.SSL 文件)。如果没有安装 SSL 接口供 LWP 使用,那么在访问此类 URL 时,您将收到“501 Protocol scheme 'https' is not supported”错误。

README.SSL文件是这样说的:

从 libwww-perl v6.02 开始,您需要从其自己的单独发行版安装 LWP::Protocol::https 模块,以启用对 LWP::UserAgent 的 https://... URL 的支持。

所以你只需要安装LWP::Protocol::https

于 2013-10-18T10:04:51.770 回答
0

对于 https 链接,您需要https://metacpan.org/module/Crypt::SSLeay

它为 LWP 提供 SSL 支持。

用我自己的项目让我大吃一惊。

于 2013-10-18T07:49:47.977 回答