9

perl の変数への curl 呼び出しの応答を取得しようとしています。

my $foo = `curl yadd yadda`;

print $foo;

動作しません。これをコマンド ラインで実行すると、curl 呼び出しによってすべての出力がターミナルに正しく出力されますが、変数にはそのデータが入力されません。

Perl curl lib をインストールして呼び出さずにこれを行う方法はありますか?

4

9 に答える 9

13

おそらくstderrに送信されます。試す

my $foo = `curl yadd yadda 2>&1`;
于 2009-06-18T22:03:37.417 に答える
5

LWP::UserAgentLWP::Simpleを検討することもできます。

于 2009-06-19T01:16:03.613 に答える
4

本当にやりたいことは何ですか?どうしても使用curlしますか、それとも Web ページのコンテンツを取得しますか?

これを行うためのより危険な方法 (これを行う必要がある次のマシンにインストールされているかどうかに関係なく、外部プログラムに依存しない方法) は次のようになります。

use LWP::Simple;

my $content = get("http://stackoverflow.com/questions/1015438/")
   or die "no such luck\n";

GET が失敗した理由を知りたい場合、または同じサイトから複数のページを取得したい場合は、もう少し機械を使用する必要があります。perldoc lwpcook始めましょう。

于 2009-06-21T11:47:24.350 に答える
3

シェルでは、2>ファイル番号 2 をリダイレクトすることを意味します。ファイル番号 2 は常に、プログラムが stderr として認識するものです。同様に、fileno 0 は stdin で、fileno 1 は stdout です。つまり、2>&1stderr (fileno 2) を stdout (fileno 1) にリダイレクトするようにシェルに指示しているとします。バッククォート演算子はシェルを使用して指定したコマンドを実行するため、シェル リダイレクトを使用できます。

my $foo = `curl yadda yadda 2>&1`;

出力を stdout にリダイレクトするように curl に指示しています。バックティック演算子が stdout をキャッチするため、探していたものが得られます。

于 2009-06-18T22:14:05.727 に答える
0

これを試して:

$var = `curl "http://localhost" 2>/dev/null`; 
print length($var)

curlstderr に進捗情報を表示し、それを /dev/null にリダイレクトすると、何が起こっているかを簡単に確認できます。

于 2009-06-18T22:06:31.313 に答える
0

これは私のシステムで動作します:

#!/usr/bin/perl

use strict;
use warnings;

my $output = `curl www.unur.com`;

print $output;

__END__

C:\> z1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

于 2009-06-18T22:09:28.640 に答える
0

パイプをファイルのように開くことができます。

$url = "\"http://download.finance.yahoo.com/d/quotes.csv?s=" . 
"$symbol&f=sl1d1t1c1ohgvper&e=.csv\"";

open CURL, "curl -s $url |" or die "single_stock_quote: Can't open curl $!\n";
$line = <CURL>;
close CURL;
于 2014-05-22T05:44:20.597 に答える
-1

キャプチャしたい出力の一部が、標準出力ではなく標準エラーにある可能性があります。これを試して:

my $foo = system "curl http://www.stackoverflow.com";
print $foo;
于 2009-06-18T22:06:56.803 に答える