スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

LWPでmultipart/form-data

2008年12月05日 01:16

細かいところまで書いてるサイトが見つからなかったので覚書

通常のPOST処理

use LWP::UserAgent;
use HTTP::Request::Common;

my $ua = new LWP::UserAgent;
$req = POST(
                'http://localhost/test.html',
                Content-Type => 'text/html',
                Content => { foo => 'bar' },
            );
my $res = $ua->request($req);
print $res;

これを基本で

$req = POST(
                $url,
                Content-Type => 'form-data',
                Content => { foo => 'bar' },
            );

これで「multipart/form-data」でデータを作成してくれる

$req = POST(
                $url,
                Content-Type => 'multipart/form-data',
                Content => { foo => 'bar' },
            );

これでも同じ
内部的に変換してるだけ


$req = POST(
                $url,
                Content-Type => 'multipart/form-data',
                Content => {
                                       foo => 'bar' ,
                                       bar => ['./bar.txt'] ,
                                  },
            );

これで、./bar.txtをアップロード

$req = POST(
                $url,
                Content-Type => 'form-data',
                Content => [
                                       'foo' ,'bar' ,
                                       'bar' ,['./bar.txt'] ,
                                  ],
            );

Contentにはハッシュのリファレンスでも無名配列でもok
ただし若干動きが違って、無名配列だと順番が保障されます
(とあるサイトで順番を見ててハッシュで嵌った)


最終的には、こんな感じで

use LWP::UserAgent;
use HTTP::Request::Common;

http_access_lwp(
    'https://localhost/a.cgi',
    'post',
    {   Content-Type => 'text/html', },
    [
        'foo', 'bar',
        'bar', 'foo',
    ]
);

sub http_access_lwp {
    my ( $url, $method, $header_of, $content_of ) = @_;
    my $req;

    my $ua = new LWP::UserAgent;

    if ( $method =~ /^POST$/i ) {
        $req = POST( $url, %{$header_of}, Content => $content_of, );
    }
    else {
        $req = GET( $url, );
    }

    return $ua->request($req);
}


スポンサーサイト


コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://skitai.blog98.fc2.com/tb.php/16-3df7c2c4
    この記事へのトラックバック


    最近の記事


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。