2

を使用してキリル文字の名前のファイルをアップロードしているときに、奇妙な問題が発生しましたWWW::Mechanize。ファイルは正しくアップロードされていますが、名前が壊れています (??????ターゲット サイトでのみ表示されます)。

コードは簡単です:

use WWW::Mechanize;
use Encode qw(from_to);

my $config = {

    login         => "login",
    password      => "pass",
    source_folder => "$Bin/source_folder",
};

my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->agent_alias("Windows IE 6");

$mech->get("http://www.antiplagiat.ru/Cabinet/Cabinet.aspx?folderId=689935");
authorize($mech);

$mech->submit_form(

    form_number => 1,
    fields      => {},
    button =>
'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$FolderControl_StdFolder_0$DocumentsGrid$btnAddItem',
);

find( \&wanted, $config->{source_folder} );

sub wanted {

    return unless -f;

    say $config->{source_folder} . "/" . $_;

    #from_to($_, "CP1251", "UTF8"); doesn't work too :-(

    my $mech = $mech->clone();
    $mech->submit_form(

        form_number => 1,
        fields      => {

            'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload' =>
              $config->{source_folder} . "/" . $_,
        },
        button => 'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$btnCommitUpload',
    );
}

ファイル名を CP1251 から UTF8 にエンコードすると、アップロードが機能しません。解決策を見つけるのを手伝ってください。

4

1 に答える 1

1

私が使用するソリューションは次のとおりです。

   my $filename = $_;
    from_to( $filename, "CP1251", "UTF8" );

    my $mech = $mech->clone();

    my $form = $mech->form_number(1);
    $mech->field( 'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload',
        $config->{source_folder} . "/" . $_ );
    $form->find_input(
        'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$fuDocumentUpload')->filename($filename);
    $mech->submit_form(

        form_number => 1,
        button => 'ctl00$ctl00$Body$MainWorkSpacePlaceHolder$btnCommitUpload',
    );
于 2012-07-07T00:20:56.570 に答える