web-dev-qa-db-ja.com

Perl:curl:(1)プロトコル 'httpはlibcurlでサポートされていないか無効になっています

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];
42
WernerCD

Windowsは、コマンド内の単一引用符を好みません。 qq {}エスケープを使用して、コマンドで二重引用符を使用してみてください。 1行変更するだけです:

my $file = qq{curl -sS "$url" |};
104
Stuart Watt

ウーブル〜

「それを引き起こしているのは、$ 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が回答しなかったため、回答として投稿しました。

3
WernerCD

次のように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";
2
minhas23

別の方法として(外部プログラムを必要としない)、LWP :: UserAgentを使用してドキュメントを取得できます。

1
Skud