JSON をペイロードとして使用して、単純な Web サービスの特定の要求に対して単純な http プロキシを実装しようとしています。
これに関する情報はいくつかありますが、ドキュメントには完全な例はありません。Google の検索結果で見つけたブログ投稿のコードをいくつか試しましたが、何も機能しませんでした。ここが私の居場所です。
リクエストは、次のようなハンドル メソッドを使用してハンドラー オブジェクトに渡されます。
sub handle
{
my $self = shift;
my $app = shift;
my $tx = $app->tx;
my $req = $app->req->clone;
$log->info("upstream host is " . $self->{upstream_host});
$log->info("upstream port is " . $self->{upstream_port});
$req->url->scheme("http")
->host($self->{upstream_host})
->port($self->{upstream_port});
$log->info("req: " . $req->to_string);
$log->info("req host:port " . $req->url->host . ":" . $req->url->port);
my $ua = Mojo::UserAgent->new;
my $tx = Mojo::Transaction::HTTP->new(req => $req);
$log->info("response: " . $tx->res->to_string());
$app->render(data => $tx->res->body);
}
ログの内容はすべて正しいように見えますが、応答オブジェクトは 404 エラーであり、実際のトラフィックは localhost:3334 でリッスンしている他のサービスに到達していません。
2013-07-02 12:28:26.929793500 [2013 年 7 月 2 日火曜日 12:28:26] [情報] req ホスト: ポート 127.0.0.1:3334 2013-07-02 12:28:26.930225500 [7 月 2 日火曜日 12:28 :26 2013] [情報] 応答: HTTP/1.1 404 が見つかりません
これのノンブロッキングバージョンを試してみましたが、実際にはリクエストが送信されなかったので、単純化しようとしました。
ここでどこが間違っているのかわかりません。リクエストを複製して別のサービスに渡し、そのレスポンスを元のクライアントに返そうとしています。
ありがとう、マイク