2012-03-01 5 views
2

Perlアプリケーションを最適化するにはasync HTTPリクエストを処理する必要があるため、HTTP応答が完了したら他の操作を処理できます。だから私は唯一の選択肢は、HTTP::Asyncモジュールを使用することだと考えています。これは簡単なリクエストでうまく動作しますが、1つのレスポンスからクッキーヘッダーを取得して次のレスポンスと一緒に送信する必要がありますので、ヘッダーを読む必要があります。Perl HTTP :: Asyncモジュールを使用してヘッダーを読み取ることはできますか?

   ... 

      $async->add($request); 
      while ($response = $async->wait_for_next_response) 
      { 
       threads->yield(); yield(); 
      } 
      $cookie = $response->header('Set-Cookie'); 
      $cookie =~ s/;.*$//; 
      $request->header('Cookie' => $cookie); 

      ... 

が、それは未定義の値にメソッド「ヘッダ」を呼び出すことはできませんエラーで終わるようでは、働いていない:私のコードです。明らかに$responseundefです。 $responseundefになる前に、どのようにヘッダを捕捉できますか?

+0

ほとんどの非同期HTTPモジュールがあります。 AnyEvent :: HTTPやPOE :: Component :: Client :: HTTPのようなイベントベースのモジュールに移動し、あなたの応答をコールバックで処理したい場合があります。アプリ全体にPOEまたはAnyEventを使用する必要はありません。 – MkV

答えて

4
while ($response = $async->wait_for_next_response) 
{ 
    threads->yield(); yield(); 
} 

$responseがfalseになるまで保証されません。偽値wait_for_next_responseが返されるのはundefです。ループ内でクッキーを抽出するか、ループ内の最後の良好な応答をキャッシュする必要があります。私はあなたがすべてでループを必要とするかわからないが、

my $last_response; 
while ($response = $async->wait_for_next_response) 
{ 
    $last_response = $response; 
    threads->yield(); yield(); 
} 

よう

何かが、動作するはずです。完全なプログラムなしでは伝えるのは難しいです。

+0

ありがとうございます。私がちょうどテストしたその他のオプションは、ループのコマンドに$ cookie = $ response-> header( 'Set-Cookie')を入れることです。 "(Set-Cookie '))&&($ response-> header(' Set-Cookie ')ne)));) –

関連する問題