1

サーバー上で異なるタスクを実行する 2 つのスクリプトがあります。1 つは Perl (.cgi) で記述され、もう 1 つは PHP で記述されています。

次のようなことを行って、perl CGI スクリプトからリクエストを送信しようとしています。

$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);
$ua->timeout(30);

$queryStr = (xxxMaskedxxx);
$request = HTTP::Request->new('GET', $queryStr);
$response = $ua->request($request);
if ($response->is_success)
{
        $search = strpos($res->content, "not");
        if($search==true)
        { return -1; }
}

PHP から結果を送り返す 2 つの方法を試しました。

これ:

HttpResponse::setCache(true);
HttpResponse::setContentType('text/html');
if (!$result)
        HttpResponse::setData("<html>Message not delivered</html>");
else
        HttpResponse::setData("<html>Message successfully delivered</html>");
HttpResponse::send();

この:

echo "Content-type: text/html\n\n";
if (!$result)
      echo 'Message not delivered' . PHP_EOL;
else
      echo 'Message successfully delivered' . PHP_EOL;

しかし$response->is_success、どちらの場合も false を返しますか? 応答を印刷しようとすると、次のようになります。

応答は HTTP::Response=HASH(0x97a8b34) です

私は何を間違えましたか?

また、2 つのスクリプトが並んでいます。それらの間で通信するためのより良い方法はありますか?

4

2 に答える 2

1

cli.phpコマンドライン引数付きのPerl 呼び出しスクリプト、

#!/usr/bin/perl

my $content = `/usr/bin/php cli.php xxxMaskedxxx`;

print $content;

cli.php受け取った引数をエコーバックする

<?php

// output first argument from command line
print $argv[1];
于 2013-05-19T12:37:54.990 に答える
1

しかし、$response->is_success は両方のケースで false を返しますか?

どちらの場合も、デフォルトのHTTP ステータス(「200 OK」) を出力しています。失敗するには、失敗を示すステータス コードを出力する必要がありますis_success

応答を印刷しようとすると、これが表示されます

それはHTTP::Responseオブジェクトです。$response->decoded_contentそこからテキストを取り出したいかどうかを調べる必要があります。

于 2013-05-19T13:08:46.093 に答える