Perl Question。我试图让这个脚本在调试器中运行。
我在Windows 7x64上使用了Aptana + Epic + ActivePerl 5.12.4。脚本开始很好,但我收到一个错误:
curl -sS http://intranet.mycompany.org/directory/directory.xml
上面的命令工作正常......但如果我启动调试器,我会收到此错误:
curl: (1) Protocol 'http not supported or disabled in libcurl
下面脚本的第一部分:
#!/usr/bin/perl
use strict;
use XML::Parser;
use Data::Dumper;
my $url = 'http://intranet.atlanticgeneral.org/directory/directory.xml';
my $output = 'C:\global.gabook';
my $file = "curl -sS '$url' |";
my $parser = new XML::Parser(Style => 'Tree');
my $tree = $parser->parsefile($file)->[1];
答案 0 :(得分:102)
Windows不喜欢命令中的单引号。尝试使用qq {}转义命令在命令中使用双引号。只需更改一行:
my $file = qq{curl -sS "$url" |};
答案 1 :(得分:3)
Wooble~
“我猜这是$ url周围的额外单引号 导致它“
当我删除'$ url'周围的引号时,它有效。引用在redhat perl中工作,但在我的windows perl调试器中不起作用:
#!/usr/bin/perl
use strict;
use XML::Parser;
use Data::Dumper;
my $url = 'http://intranet.atlanticgeneral.org/directory/directory.xml';
my $output = 'C:\global.gabook';
my $file = "curl -sS $url |";
my $parser = new XML::Parser(Style => 'Tree');
my $tree = $parser->parsefile($file)->[1];
自Wooble没有发布回答。
答案 2 :(得分:2)
当我在我的java程序中使用curl命令时,我得到了同样的错误,如下所示
String command = "curl 'http://google.com'";
try
{
Process proc = Runtime.getRuntime().exec(command);
.......
}catch(Exception e){}
将命令更改为以下修复此错误
String command = "curl http://google.com";
实际上,由于shell解释器,这可能是一个问题。 我使用curl命令,例如下面的例子
String command = "curl -duser.name=hdfs -dexecute=select+*+from+logdata.test; -dstatusdir=test.output http://hostname:50111/templeton/v1/hive";
答案 3 :(得分:1)
作为替代方案(并且不需要外部程序),您可以使用LWP :: UserAgent来获取文档。
答案 4 :(得分:0)
您传递的拼写错误的协议部分如“ htpt://example.com”中所示,或者如在不太明显的情况下,如果给协议部分加上前缀“ http://example.com/”中的空格,则采用这种方式。