1

私はこれで数時間立ち往生しており、調査しても解決策を見つけることができませんでした.

次の HTML コードは、私が必要とするものに対して機能します。

<form action="uploader.php" method="POST" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="Filedata" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

ただし、次の Perl コードは機能しません。これは、必要なヘッダーを送信していないためだと思います。

my @headers  = ('Content-Disposition' => 'form-data; name="Filedata"; filename="test.txt"',
                'Content-Type'        => 'text/plain',
                'Content'             => 'File content goes here.');

my $browser  = LWP::UserAgent->new;
my $response = $browser->post('uploader.php', undef, @headers);

うまくいかない理由を誰かが指摘できれば、私は感謝します。ありがとうございました!

4

2 に答える 2

7

の Content-Type を提供していますが、これは明らかに間違っています。ファイルを同封して MIME メッセージをtext/plain送信する必要があります。これは MIME モジュールを使って手動で行うこともできますが、jpalecek が指摘するように、HTTP::Request::Commonは既にそれを行う方法を知っています。このようなリクエストは機能するはずです:multipart/form-datatext/plain

my $response = $browser->request(
    POST "http://somewhere/uploader.php",
        Content_Type => 'form-data',
        Content => [
            Filedata => [ 
                undef,
                "test.txt",
                Content_Type => "text/plain",
                Content => "file content goes here"
            ]
        ]
);

または、test.txt が実際にディスク上に存在する場合:

my $response = $browser->request(
    POST "http://somewhere/uploader.php",
        Content_Type => 'form-data',
        Content => [
            Filedata => [ "/path/to/test.txt" ]
        ]
);

で十分です。どちらの場合でも、必ずuse HTTP::Request::Common;コードに追加してください。

于 2012-11-11T06:42:44.477 に答える