当前位置: 首页 > 知识库问答 >
问题:

Netty -发送发布请求

袁赞
2023-03-14

以下是我的情况:

    < li >客户端向Netty服务器发送POST请求。 < li>Netty处理POST请求,如果服务器确定需要发送响应,它会将响应发送回客户端。否则,服务器必须向另一个endpoint发送POST请求,获取响应并将该响应发送回客户端。

到目前为止,我已经处理了传入的POST请求。要发送传出的POST请求,这是我在Handler中所做的。

private void sendHttpPost(String input, ChannelHandlerContext ctx) {
        try {
            String url = "http://localhost";
            URI uri = new URI(url);
            Bootstrap b = new Bootstrap();
            b.group(new NioEventLoopGroup())
            .channel(NioServerSocketChannel.class)
            .handler(new PostRequestHandler())
            .option(ChannelOption.AUTO_READ, false);
           Channel f = b.connect("REMOTE_HOST", 8888).sync().channel();       
           HttpRequest postReq = new DefaultHttpRequest(HttpVersion.HTTP_1_1, 
                                        HttpMethod.POST, uri.getRawPath());
           postReq.headers().set(HttpHeaders.Names.HOST, "localhost");
           postReq.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
           postReq.headers().set(HttpHeaders.Names.CONTENT_TYPE,"application/x-www-form-urlencoded");
           f.writeAndFlush(postReq);

           // Wait for the server to close the connection.
           f.closeFuture().sync();
        } catch (Exception e) {
            e.printStackTrace();
        }           
    }

这显然是错误的,因为我正在处理程序中启动一个新的 Bootstrap 进程。但是,我无法在没有通道的情况下发送请求。我无法重用渠道处理程序上下文中的现有渠道。

正确的做法是什么?如何派生一个新的HttpPostRequest?任何帮助都将不胜感激。

共有1个答案

潘修为
2023-03-14

在客户端引导代码中使用 .channel(NioSocketChannel.class)而不是 .channel(NioServerSocketChannel.class)。就是这样。

 类似资料:
  • 我正在尝试让客户端/服务器程序通过ssl交换http消息。首先,我创建了使用DefaultHttpRequest成功交换http请求的客户端和服务器程序。发送请求的代码如下所示: 客户端管道工厂包含以下内容: 服务器管道工厂包含以下内容: .... 到目前为止一切顺利。客户端发送请求,服务器接收并解码请求。使用正确的数据调用我的处理程序上的messageReceived方法。 为了启用 SSL,我

  • 问题内容: 我一直在尝试从SO和其他站点上的大量示例中学习,但是我无法弄清楚为什么我一起学习的示例无法正常工作。我正在构建一个小型的概念验证应用程序,该应用程序可以识别语音并将其(文本)作为POST请求发送到node.js服务器。我确认了语音识别功能,并且服务器正在通过常规浏览器访问获得连接,因此我被认为是问题出在应用程序本身。我想念一些小而愚蠢的东西吗?没有引发任何错误,但是服务器从不识别连接。

  • 我有一个javaScript代码,其中我发送了带有一些参数的http post。Post参数是一个类似于以下内容的json: 在JavaScript中,我只是打开request、设置头和发送参数。Post请求如下所示: 现在我需要在Java中进行相同的调用(由于一些内部POC需求)。为此,我做了以下几点: 但这给了我错误。 提前道谢。

  • 我正在尝试根据下面的代码提出帖子请求: 此请求不需要身份验证,也不需要登录和密码。在邮递员那里,我可以成功地提出请求,但当我尝试执行上述代码时,我得到了: 401未经授权 我在邮递员那里模拟了错误,它给了我下面的信息: 当我在Postman中将身份验证方法更改为“No Auth”时,请求运行良好。 我想我必须在代码中设置这个选项“No Auth”,但我不知道如何设置。 我这样做: 但错误仍在继续。

  • 发送请求 发送同步请求 Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send(); String clientVersion = web3Client

  • 问题内容: 我正尝试从其自己的视图之一向我的Flask应用发送发布请求,但该请求一直挂起,直到我杀死服务器为止。如果我使用JavaScript进行请求,则效果很好。为什么从Python代码中不起作用? 问题答案: 在1.0之前,Flask的开发服务器默认为单线程。在这种模式下,它一次只能处理一个请求。发出请求直到接收到响应为止。您的Flask代码在一个线程中发出一个请求,然后等待。没有其他线程可以