Как я могу вызвать curl из скрипта Perl CGI? - PullRequest
0 голосов
/ 30 ноября 2009

У меня есть скрипт CGI (perl), который пытается вызвать curl с помощью команды open:

@curl = ('/usr/bin/curl', '-S','-v','--location', $url, 
                          '-H', 'Content-Type:'.$content_type,
                          '-H', "Authorization: $authorization",
                          '-H', "X-Gdata-Key:$gdata_key",
                          '-H', "Content-Length:$content_length",
                          '-H','GData-Version:2',
                          '--data',"\@$filename");

И затем выполняется так:

open CURL, "-|", @curl;

Программа отлично работает из командной строки, но когда я пытаюсь запустить ее в браузере, время ожидания страницы заканчивается.

Что мне нужно изменить на моем сервере или в моем скрипте, чтобы это работало правильно?

Ответы [ 3 ]

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

В дополнение к предложению Синан тайм-аут, который вы получаете, может указывать на длительный процесс - всегда проблема при запуске под CGI. Пожалуйста, посмотрите на другие решения, такие как менеджер очередей. Я использую Beanstalk для этих ситуаций. Но я слышал хорошие вещи о Gearman и Шварц

Я также много узнал о запущенных процессах, которые занимают много времени в CGI, из этой статьи

1 голос
/ 01 декабря 2009

После просмотра журнала ошибок и просмотра ошибки

[Mon Nov 30 14:59:07 2009] [error] slurp_filename(
'/var/www/vhosts/mydomain.net/httpdocs /youtube/youtube.pl') / opening: (2)
No such file or directory at /usr/lib64/perl5/vendor_perl/5.8.6/
x86_64-linux-thread-multi/ModPerl/RegistryCooker.pm line 540 

Я думал, что это как-то связано с тем фактом, что я передаю свой XML для скручивания в виде файла, а не строки Вот новая команда, которая работает с xml, переданным в виде строки:

@curl = ('/usr/bin/curl', '-S','-v','--location', $url, '-H',
'Content-Type:'.$content_type,'-H',"Authorization: $authorization",'-H',
"X-Gdata-Key:$gdata_key",'-H',"Content-Length:$content_length",'-H',
'GData-Version:2','--data',"$xml");

И я все еще использую команду ниже, чтобы открыть / вызвать curl:

open CURL, "-|", @curl;

Теперь он успешно работает в браузере и возвращает мне значения, которые я запрашиваю с ним.

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

Вы должны проверить, успешно ли open, а также попытаться close канал явным образом, проверить на наличие ошибок. В случае ошибки, die с сообщением об ошибке. Затем найдите сообщение об ошибке в журнале ошибок сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...