簡體   English   中英

如何使用Perl的LWP登錄Web應用程序?

[英]How do I use Perl's LWP to log in to a web application?

我想編寫一個腳本來登錄Web應用程序,然后轉移到應用程序的其他部分:

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use Data::Dumper;

$ua = LWP::UserAgent->new(keep_alive=>1);

my $req = POST "http://example.com:5002/index.php",
[ user_name     => 'username',
  user_password => "password",
  module        => 'Users',
  action        => 'Authenticate',
  return_module => 'Users',
  return_action => 'Login',
];

my $res = $ua->request($req);
print Dumper(\$res);
if ( $res->is_success ) {
    print $res->as_string;
}

當我嘗試這段代碼時,我無法登錄該應用程序。 返回的HTTP狀態代碼是302,但沒有數據。

如果我發布所有必需的用戶名/密碼,那么它應該返回應用程序的主頁並保持連接實時移動應用程序的其他部分。

您可以為此目的使用WWW :: Mechanize

Mech支持執行一系列頁面提取,包括以下鏈接和提交表單。 解析每個獲取的頁面並提取其鏈接和表單。 可以選擇鏈接或表單,填寫表單字段並可以獲取下一頁。 Mech還會存儲您訪問過的URL的歷史記錄,可以查詢和重新訪問這些URL。

我猜LWP沒有遵循重定向:

push @{ $ua->requests_redirectable }, 'POST';

您沒有使用WWW :: Mechanize的原因

我已經使用LWP登錄到大量網站並對內容進行處理,所以做你想做的事情應該沒問題。 到目前為止,您的代碼看起來不錯,但我建議兩件事:

  1. 如上所述,您可能需要使請求可重定向
  2. 您可能還需要啟用cookie:$ ua-> cookie_jar({});

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM