gpt4 book ai didi

http - Netty - 通过 ssl 发送 http 请求

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:42 25 4
gpt4 key购买 nike

我正在尝试让客户端/服务器程序通过 ssl 交换 http 消息。首先,我创建了使用 DefaultHttpRequest 成功交换 http 请求的客户端和服务器程序。发送请求的代码如下所示:

    HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "https://localhost:8443");

ChannelBuffer buf = ChannelBuffers.copiedBuffer(line, "UTF-8");
request.setContent(buf);

request.setHeader(HttpHeaders.Names.HOST, host);
request.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
request.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/xml");
request.setHeader(HttpHeaders.Names.CONTENT_LENGTH, Integer.toString(buf.capacity()));

ChannelFuture writeFuture = channel.write(request);

客户端管道工厂包含以下内容:

pipeline.addLast("decoder", new HttpResponseDecoder());
pipeline.addLast("encoder", new HttpRequestEncoder());

// and then business logic.
...

服务器管道工厂包含这个:

pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("encoder", new HttpResponseEncoder());

// and then business logic.

....

到目前为止一切顺利。客户端发送,服务器接收并解码请求。使用正确的数据调用我的处理程序上的 messageReceived 方法。

为了启用 SSL,我从 SecureChat 示例中提取了一些代码并添加到客户端和服务器管道工厂:

对于服务器:

SSLEngine engine = SecureChatSslContextFactory.getServerContext().createSSLEngine();
engine.setUseClientMode(false);

pipeline.addLast("ssl", new SslHandler(engine));

// On top of the SSL handler, add the text line codec.
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
8192, Delimiters.lineDelimiter()));

对于客户:

SSLEngine engine = SecureChatSslContextFactory.getClientContext().createSSLEngine();
engine.setUseClientMode(true);

pipeline.addLast("ssl", new SslHandler(engine));

// On top of the SSL handler, add the text line codec.
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
8192, Delimiters.lineDelimiter()));

现在,当我从客户端发送请求时,服务器上似乎什么也没有发生。当我启动应用程序时,服务器似乎已连接(调用 channelConnected),但是当我发送消息时,没有任何数据到达服务器(永远不会调用 messageReceived)。

我做的事情有明显的错误吗?这是 https 应该工作的方式吗?或者是否有通过 ssl 发送 http 请求的不同方法?

谢谢,维赞

最佳答案

您需要在客户端调用 SslHandler.handshake()。再次检查该示例。

关于http - Netty - 通过 ssl 发送 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com