Perlの質問 。このスクリプトをデバッガーで実行しようとしています。
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];
Windowsは、コマンド内の単一引用符を好みません。 qq {}エスケープを使用して、コマンドで二重引用符を使用してみてください。 1行変更するだけです:
my $file = qq{curl -sS "$url" |};
ウーブル〜
「それを引き起こしているのは、$ 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が回答しなかったため、回答として投稿しました。
次のようにJavaプログラムでcurlコマンドを使用すると、同じエラーが発生しました
String command = "curl 'http://google.com'";
try
{
Process proc = Runtime.getRuntime().exec(command);
.......
}catch(Exception e){}
コマンドを次のように変更すると、このエラーが修正されました
String command = "curl http://google.com";
実際には、シェルインタープリターが原因で問題になる可能性があります。以下の例のようなcurlコマンドを使用しました
String command = "curl -duser.name=hdfs -dexecute=select+*+from+logdata.test; -dstatusdir=test.output http://hostname:50111/templeton/v1/Hive";
別の方法として(外部プログラムを必要としない)、LWP :: UserAgentを使用してドキュメントを取得できます。