首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mojolicious充当http代理

Mojolicious充当http代理
EN

Stack Overflow用户
提问于 2013-07-03 10:38:40
回答 1查看 1.1K关注 0票数 2

我正在尝试为使用JSON作为有效负载的简单web服务的某些请求实现一个简单的http代理。

我在文档中看到了一些关于这方面的信息,但没有完整的示例。我试过在谷歌搜索结果中找到的博客文章中的一些代码,但都不能正常工作。这是我所在的地方

该请求被传递给一个处理程序对象,其处理方法如下

代码语言:javascript
复制
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 Tue Jul 2 12:28:26 2013请求主机:端口127.0.0.1:3334 2013-07-02 12:28:26.930225500 Tue Jul 2 12:28:26 2013响应:HTTP/1.1404未找到

我尝试了非阻塞版本,但再次,实际上没有发送任何请求,所以我尝试简化。

感谢你的帮助,我不知道我在哪里做错了。我只是尝试复制请求,将其传递给另一个服务,然后将其响应返回给原始客户端。

谢谢,迈克

EN

回答 1

Stack Overflow用户

发布于 2013-07-03 18:45:02

好吧,奇怪。这是可行的。

代码语言:javascript
复制
sub handle
{
    my $self = shift;
    my $app = shift;

    my $tx = $app->tx;
    my $req = $app->req->clone;
    $log->debug("upstream host is " . $self->{upstream_host});
    $log->debug("upstream port is " . $self->{upstream_port});
    $req->url->scheme("http")
            ->host($self->{upstream_host})
            ->port($self->{upstream_port});

    $log->debug("req: " . $req->to_string);
    $log->debug("req host:port " . $req->url->host . ":" . $req->url->port);

    my $ua = Mojo::UserAgent->new;
    my $tx = $ua->start(Mojo::Transaction::HTTP->new(req => $req));

    $app->render(data => $tx->res->body);
}

我想看看这和我已经做的有什么显著的不同……

现在,这是一个阻塞请求。让我们看看我是否可以让它以非阻塞的方式工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17438818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档