1

Mojolicious のみを使用して動作するように、古い Perl モジュールを使用して記述された古い Web スクレイピング スクリプトをいくつか移植しようとしています。

Mojo でいくつかの基本的なスクリプトを作成しましたが、安全なログイン サイトを使用する認証済みログインと、これをスクリプトでどのように処理する必要があるかについて戸惑っていMojo::UserAgentます。残念ながら、ドキュメントで確認できる唯一の例は、フォームを使用しない基本認証です。

Mojo:UserAgent で動作するように変換しようとしている Perl スクリプトは次のとおりです。

#!/usr/bin/perl

use LWP;
use LWP::Simple;
use LWP::Debug qw(+);
use LWP::Protocol::https;
use WWW::Mechanize;
use HTTP::Cookies;

# login first before navigating to pages
# Create our automated browser and set up to handle cookies
my $agent = WWW::Mechanize->new();
$agent->cookie_jar(HTTP::Cookies->new());
$agent->agent_alias( 'Windows IE 6' );  #tell the website who we are (old!)

# get login page

$agent->get("https://reg.mysite.com")
$agent->success or die $agent->response->status_line;

# complete the user name and password form
$agent->form_number (1);
$agent->field (username => "user1");
$agent->field (password => "pass1");
$agent->click();

#try to get member's only content page from main site on basis we are now "logged in" 
$agent->get("http://www.mysite.com/memberpagesonly1");
$agent->success or die $agent->response->status_line;

$member_page = $agent->content();
print "$member_page\n";

したがって、上記は正常に機能します。Mojolicious で同じ仕事をするように変換するにはどうすればよいですか?

4

2 に答える 2

3

Mojolicious は Web アプリケーション フレームワークです。Mojo::UserAgent低レベルの HTTP ユーザー エージェントとしてうまく機能し、(特に非同期要求と IPV6 のネイティブ サポート) からは利用できない機能を提供しますが、どちらLWPWWW::MechanizeWeb スクレイピングほど便利ではありません。

WWW::MechanizeサブクラスLWP::UserAgentを使用してインターネットとインターフェースし、HTML::Form検出したフォームを処理するために使用します。Mojo::UserAgentには HTML フォームを処理する機能がないため、対応する HTTP リクエストを作成するのは簡単ではありません。使用される HTTP メソッド (GETまたはPOST) などの情報、フォーム フィールドの名前、非表示フィールドのデフォルト値の挿入はすべて自動的に行われHTML::Form、 に制限されている場合はプログラマーに任されますMojo::UserAgent

前者は記入済みフォームの送信を表すオブジェクトを必要とするのに対し、後者はで使用するオブジェクトを生成するためMojo::UserAgent、 と組み合わせて使用​​しようとしても問題があるように思えます。HTML::FormMojo::Transaction::HTTPHTTP::RequestLWP

要するに、大幅に書き直す気がない限り、モジュールWWW::Mechanizeを使用してソフトウェアを再実装する方法はないと思います。Mojolicious

于 2012-11-25T18:51:48.567 に答える
1

を使用WWW::Mechanizeして Web サーバーと通信したり、Mojo::DOMを使用して Mojolicious をパーサーとして利用したりできます。2 つの世界のベスト... :)

于 2012-11-25T22:00:35.373 に答える