2013-05-31 2 views
3

У меня есть скрипт perl, который перемещается по двум страницам формы на веб-сайте, чтобы загрузить результат окончательной отправки формы в файл. Эта страница очень большая, и я бы предпочел написать ее прямо на диск вместо того, чтобы все сидеть в памяти.perl WWW :: Механизм submit_form() записывается непосредственно в файл?

Вот фрагмент кода:

$mech->submit_form(
    form_name => 'search', 
    fields  => { 
     "srch_recd" => $cfg{max_rows}, #results per page 
    } 
); 

$mech->save_content($workdir.$cfg{cachedstones}); 

Я знаю, что я могу это сделать:

$mech->get($url, ":content_file"=>$tempfile); 

, чтобы иметь результат перейти к файлу при использовании GET(). Однако делать то же самое не удалось для submit_form().

Как я могу получить результат submit_form(), чтобы перейти непосредственно в поле, а не сидеть в памяти?

+0

http://stackoverflow.com/questions/2263662/how-can-i-download-a-file-using-wwwmechanize-or-any-perl-module или http://stackoverflow.com/questions/1727923/how-do-i-download-a-file-with-wwwmechanize-after-it-submits-a-form –

+0

Я рассмотрел эти вопросы, и они не совсем решают одну и ту же проблему. В коде у меня уже есть работы. Я отправляю форму и получаю страницу результатов, которую я сохраняю с помощью $ $ mech-> save_content ($ workdir. $ Cfg {cachedstones}) '. Однако эта страница очень большая, и она растрачивает недопустимый объем памяти. Я хочу оптимизировать свой сценарий, чтобы файл записывался по мере поступления страницы результатов. – Jessa

ответ

0

От WWW::Mechanize::FAQ

Вы также можете сохранить любое содержимое непосредственно на диск с помощью: флаг content_file получить(), которая является частью LWP :: UserAgent.

$mech->get('http://www.cpan.org/src/stable.tar.gz', 
      ':content_file' => 'stable.tar.gz'); 

Это должно работать -> пост тоже.

+0

Вы также можете создать объект запроса с HTTP :: Request :: Common POST(), а затем вызвать запрос $ mech-> $ req_object, $ filename) ' – runrig

+1

Или (посмотрев, что я делал ранее) установите current_form, создайте объект запроса с помощью' my $ req = $ mech-> current_form() -> click() ', а затем' $ mech-> request ($ req, $ filename) ' – runrig