Как использовать Perl CGI локально, без использования curl и apache2? - PullRequest
1 голос
/ 09 ноября 2009

Я хотел бы отправить форму в локальный скрипт CGI (w3c-markup-validator), но это слишком медленно при использовании curl и apache, я хочу использовать этот скрипт CGI более 5000 раз в другой сценарий. и в настоящее время это занимает более одного часа.

Что я должен сделать, чтобы передать форму непосредственно сценарию CGI (я загружаю файл с curl)?

edit: Это кажется слишком сложным и отнимает много времени для того, что мне нужно, поэтому я ждал полтора часа, каждый раз, когда мне нужно было протестировать мои сгенерированные файлы xhtml. В окончательном варианте я не проверял ни один из ответов ниже, поэтому вопрос останется открытым.

Ответы [ 4 ]

3 голосов
/ 09 ноября 2009

В зависимости от деталей скрипта вы можете создать поддельную среду CGI, используя HTTP :: Request :: AsCGI , а затем получить скрипт CGI с помощью оператора "do". Но когда дело доходит до скорости и удобства обслуживания, лучше всего было бы выделить важную часть работы скрипта в свой собственный модуль и переписать CGI в качестве клиента этого модуля. Таким образом, у вас не будет для вызова его как CGI - пакетная работа, о которой вы сейчас говорите, будет просто другой программой, использующей тот же модуль для выполнения той же работы, но без CGI или Среда веб-сервера мешает.

2 голосов
/ 09 ноября 2009

ОК, я посмотрел исходный код этой вещи, и нелегко извлечь из всего остального проверочный материал. Итак, вот что я хотел бы.

Во-первых, ров curl. Запуск нового процесса для каждого файла, который вы хотите проверить, не очень хорошая идея. Вам нужно написать сценарий драйвера, который берет список URL-адресов и отправляет их на локальный сервер, работающий на localhost. На самом деле, вы, возможно, позже захотите распараллелить это, потому что обычно в любом случае будет куча httpd процессов. Ну, я забегаю вперед.

Этот сценарий может использовать LWP , потому что все, что вы делаете, это отправляете некоторые данные в сценарий CGI на localhost и сохраняете / обрабатывает результаты. Вам не нужна полная WWW :: Mechanize функциональность.

Что касается CGI-скрипта validator, вы должны настроить его как сценарий реестра mod_perl . Убедитесь, что вы предварительно загрузили все необходимые библиотеки.

Это должно повысить скорость обработки документов в секунду с 1,3 до чего-то более приемлемого.

1 голос
/ 09 ноября 2009

CGI - довольно простой API. Все, что он делает - читает данные либо из переменной окружения (для запросов GET), либо из stdin (для запросов POST). Поэтому все, что вам нужно, это настроить среду и вызвать скрипт. Подробнее см. документы .

0 голосов
/ 09 ноября 2009

Если скрипт использует CGI.pm, вы можете запустить его из командной строки, указав ключ -debug (для CGI.pm в операторе использования). Это позволит вам отправлять переменные post на STDIN. Возможно, вам придется немного подправить сценарий, чтобы это сработало.

...