2016-10-05 5 views
1

Я следую рекомендациямPost/отправить файл с помощью submit_form рутины WWW :: Механизируйте модуль

Если вы хотите отправить файл и получить его содержимое от скаляра, а не файл в файловой системе, вам можно использовать:

$mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] }); 

от WWW :: Механизируйте documentation

Мой код для отправки файла

$mech->submit_form(with_fields => 
      { logfile => [ [ undef, "import_codes.xlsx", Content => $file_dir ], 1 ] }); 

Его недостаток с исключением;

Can't call method "value" on an undefined value at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1568. 
at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1568. 
    WWW::Mechanize::set_fields('WWW::Mechanize=HASH(0xf51b040)', 'logfile', 'ARRAY(0xf71e6dc)') called at /usr/local/share/perl/5.18.2/WWW/Mechanize.pm line 1948 
    WWW::Mechanize::submit_form('WWW::Mechanize=HASH(0xf51b040)', 'form_name', 'inputform', 'fields', 'HASH(0xf71e920)') 

фрагмент кода Mechanize.pm от линии 1560 до 1575

sub set_fields { 
    my $self = shift; 
    my %fields = @_; 

    my $form = $self->current_form or $self->die('No form defined'); 

    while (my ($field, $value) = each %fields) { 
     if (ref $value eq 'ARRAY') { 
      $form->find_input($field, undef, 
         $value->[1])->value($value->[0]); 
     } 
     else { 
      $form->value($field => $value); 
     } 
    } # while 
} 
+0

В вашей 'submit_form отсутствует лимент закрывающего' '' '. Это ошибка копирования/вставки? – simbabque

+0

Да, его ошибка копирования/вставки, мой код компилируется и выполняется. – Anil

+0

Пожалуйста, исправьте это. Какая версия WWW :: Mechanize это? В последнем методе 'set_fields' [в строке 793] (https://v1.metacpan.org/source/OALDERS/WWW-Mechanize-1.80/lib/WWW/Mechanize.pm#L793). – simbabque

ответ

3

Похоже, что вы используете неправильное имя поля для поля ввода файла в форме. (Акцент мой).

Если вы хотите отправить файл и получить его содержимое от скаляра, а не файла в файловой системе, вы можете использовать:

        vvvvvvv 
$mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] }); 

Это logfile является имя атрибута входа в котором вы хотите, чтобы содержимое файла было помещено. В их примере это logfile, но в вашей реальной форме на веб-сайте вы пытаетесь представить, скорее всего, что-то еще.

$mech->submit_form звонки $mech->form_with_fields. Документы для этого метода говорят:

Возвращает undef, если форма не найдена.

После этого set_fields он потерпит неудачу, потому что возвращается undef.

Используйте правильное имя поля и оно должно работать.

+1

Да, вы правы, в этой конкретной форме введите имя файла, если файл. – Anil

 Смежные вопросы

  • Нет связанных вопросов^_^