2009-11-30 148 views
0

我有尝试使用open命令来调用卷曲一个CGI(perl的)脚本:如何从Perl CGI脚本调用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; 

程序的命令行完美的作品,但是当我尝试在浏览器中运行它时,页面最终会超时。

我需要做什么来改变我的服务器上或在我的脚本得到这个正常工作?

+2

可能要问这对服务器故障 – JasonWyatt 2009-11-30 17:44:07

+3

什么是错误日志?在你的web服务器的'$ PATH'中缺少一些东西的机会很大。 – friedo 2009-11-30 17:46:43

+1

这在纯Perl中很容易实现。是否有你想使用curl而不是LWP :: UserAgent等的原因? – 2009-12-01 16:33:13

回答

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"); 

,我仍然使用下面的命令来打开/呼叫卷曲:

open CURL, "-|", @curl; 

它现在已经成功地运行在浏览器并返回我所要求的值。

1

你应该检查open成功,也试图明确close管道,检查错误。如有错误,请提供die并附带错误消息。然后在服务器错误日志中找到错误消息。当在CGI运行始终是一个问题 -

+0

Sinan, 谢谢。我试过这个,程序挂在打开的命令上(我试着在退出之前和之后退出程序)。 错误日志文件有以下内容,我仍然试图去弄明白: [Mon Nov 30 14:59:07 2009] [error] slurp_filename('/ var/www/vhosts/mydomain.net/httpdocs /youtube/youtube.pl')/开口:(2)在/usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi/ModPerl/RegistryCooker.pm线540 – 2009-11-30 20:01:45

+0

没有这样的文件或目录@ Miriam Raphael Roberts:错误信息与你的文章中的代码无关。特别是发布发布“开放”消息的代码部分。 '(2)'暗示我正在评估一些标量上下文中的数组,但是如果没有看到实际的代码,就不可能说明什么是确定的。显示'slurp_filename'函数(为什么你不使用'File :: Slurp'?) – 2009-11-30 20:42:14

1

除了思南的建议,你所得到的超时可能指向一个长期运行的进程。请查看其他解决方案,如队列管理器。我在这些情况下使用Beanstalk。但我听到好东西GearmanThe Schwartz

我也学到了很多有关运行需要花费大量的时间在CGI从this article