あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

LWP::UserAgentでフォームをポストする (2017.03.01)

背景

ドキュメントに書かれている方法なのにネット(*)で見かけなかったので(そーゆーの大好き♪)。
*:すみません、日本語のブログだけです。ごめんなさい。

ネットでよく見る書き方

  1. フォームのリクエストを作る
  2. ポストする
なぜ一発でポストしないのだ? なんかPerlっぽくないなー。 検索して見つかるブログがどれもこの方法だから元ネタがあるのかも。
リクエストを作ってポスト LWP - Google 検索

私のコード

実際に私のプロジェクト共有ライブラリに書いてあるコードをコピペしました。 このライブラリはコメントを見てお分かりのように際どい機能なので非公開です。
# 動画ファイルをアップロード
$res = $self->ua->post("http://www.upload.nicovideo.jp/",
	Content_Type => "form-data",
	Content => [
		filename => [Encode::encode $self->{system_code}, $filename],
		MAX_FILE_SIZE => $max_file_size,
		cmd => $cmd,
		uniq_id => $uniq_id,
		screen => $screen,
		INVALID_EXTENSIONS => $inv_ext,
		async => $async,
	],
);

参考資料

LWP::UserAgent - search.cpan.org

$ua->post( $url, $field_name => $value,... Content => $content )

This method will dispatch a POST request on the given $url, with %form or @form providing the key/value pairs for the fill-in form content. Additional headers and content options are the same as for the get() method.
This method will use the POST() function from HTTP::Request::Common to build the request. See HTTP::Request::Common for a details on how to pass form content and other advanced features.