我正在尝试为使用 JSON 作为有效负载的简单 Web 服务的某些请求实现一个简单的 http 代理。
我在这方面看到了一些信息,但文档中没有完整的示例。我已经尝试了一些我在谷歌搜索结果中找到的博客文章中的代码,但没有什么可以工作。这就是我所在的地方。
请求被传递给处理程序对象,使用类似这样的句柄方法
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] [信息] 请求主机:端口 127.0.0.1:3334 2013-07-02 12:28:26.930225500 [7 月 2 日星期二 12:28 :26 2013] [信息] 响应:HTTP/1.1 404 未找到
我尝试了这个的非阻塞版本,但实际上没有发送任何请求,所以我试图简化。
帮助表示赞赏,我不确定我在哪里出错了。我只是想复制请求,将其传递给另一个服务,然后将其响应返回给原始客户端。
谢谢,迈克