我有一个CGI(perl)脚本试图使用open命令调用curl:
@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;
该程序在命令行中运行良好,但当我尝试在浏览器中运行时,页面最终会超时。
我需要在服务器或脚本中更改哪些内容才能使其正常工作?
答案 0 :(得分:1)
您应该检查open
是否成功并且还明确尝试close
管道,检查错误。如果出现错误,die
会显示错误消息。然后在服务器错误日志中找到错误消息。
答案 1 :(得分:1)
除了Sinan的建议之外,你所获得的超时可能指向一个长时间运行的过程 - 在CGI下运行时总是一个问题。请查看其他解决方案,如队列管理器。我在这些情况下使用Beanstalk。但我听说过有关Gearman和The Schwartz
的好消息我还学到了很多关于在this article
的CGI下运行花费大量时间的流程答案 2 :(得分:1)
查看错误日志并查看错误
[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;
它现在在浏览器中成功运行,并返回我请求它的值。