end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

LWPでコマンドラインからファイルをアップロード

フォームからファイルをアップロードするwebアプリケーションは、よく見かけますが、LWP::UserAagent を使用すれば、CLIプログラムでも可能です。

#!perl

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

my $TARGET_CGI = 'http://hogehoge.jp/cgi-bin/receive_file.pl';
my $SUBMIT_CONTENT =
    [action =>		"input",
     input_kanji_code => "auto",	#入力の文字コード
     output_file_format => "csv" ];	#出力形式

sub main {
    my ($upfile) = @_;
    my $ret_content = upload_file($upfile);
    print STDERR Dumper($ret_content);
}

sub upload_file {
    my ($upfile) = @_;

    my $ua = LWP::UserAgent->new;
    my @content = @$SUBMIT_CONTENT;
    push( @content, file =>	[$upfile]);

    my $res = $ua->request(POST $TARGET_CGI,
			   Content_Type => 'form-data',
			   Content => \@content );

    unless ( $res->is_success ){
	warn $res->as_string;
	return undef;
    }
    return $res->content;
}

main(@ARGV);