end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

再 LWP::UserAgentfor perl でリダイレクト先のコンテンツを取得

2010年に上記※1を記載しましたが、※2によれば、 LWP::UserAgent->new(%option) の %option には次があるらしい。

KEY default note
agent "libwww-perl/#.###" USER_AGENT
cookie_jar undef 使ったことはあります
timeout 180
max_size undef max contents size
requests_redirectable ['GET', 'HEAD'] redirectする対象method
max_redirect 7 max redirect count
protocols_allowed undef 許可protocolらしいが...
protocols_forbidden undef 禁止protocolらしいが...
from undef mail address?
default_headers HTTP::Headers->new HTTP::Headers object?
conn_cache undef 何だろう?
parse_head 1 何だろう?

特に、redirect に関しては、requests_redirectable や max_redirect が ありますので、上記※1は、以下のようになると思います。

#!/usr/local/bin/perl
use strict;
use warnings;
use HTTP::Request::Common;
use LWP::UserAgent;
use Encode;
use CGI;

# redirectを発生させる仮?のcgiを指定
my $TARGET_CGI = "http://cent80.a5.jp:8080/Test/searchto.pl";

main();

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

    # 301や302検知後、redirectする場合の対象method
    #   refer to https://soft.bko.to/perl/K-M/LWP-UserAgent.html
    $ua->requests_redirectable(["POST","GET"]);
  
    my $req_data =[limit              =>20,
           offset             =>20,
           blog_id            =>2,
           search             =>'("plantype|P1" OR "plantype|P2")',
           SearchSortBy       =>"text",
           SearchResultDisplay=>"descend",
           searchFields       =>"title,more"];

    my $req = HTTP::Request::Common::POST($TARGET_CGI, $req_data);
    $req->header("X-Requested-With"  =>'XMLHttpRequest',
         "X-MT-Authorization"=>'MTAuth accessToken=HOGEHOGE');
    
    my $res = $ua->request($req);

    # requests_redirectable([]) の様に空にした場合、以下のifがtrue
    if ( $res->is_redirect ) {  # redirectの場合
        print "REDIRECT DETECTED\n";
        print $res->as_string, "\n";
        return;
    }

    if ( $res->is_success ) {
        print $res->content, "\n";
        return;
    }
}