繁体   English   中英

通过Java中的套接字发送HTTP / 2请求

[英]Sending HTTP/2 request via Socket in Java


我需要通过Java类中的TCP套接字发送HTTP / 2请求。 我已经适配器了一段适用于纯HTTP / 1.1的代码。 但是,使用HTTP / 2时,它不会输出任何响应或错误代码。

您能看到其中有什么问题吗? 我尝试访问的服务器位于https:// localhost:8443

Socket s = new Socket(InetAddress.getByName("localhost"), 8443);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.print("GET / HTTP/2.0\r\n");
pw.print("Host: localhost:8443\r\n\r\n");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while((t = br.readLine()) != null) System.out.println(t);
br.close();

谢谢!

那不管用。

HTTP / 2是二进制协议,而不是文本协议,因此,要使用原始套接字,必须生成构成HTTP / 2请求的适当字节。

这非常复杂,因为它要求您实现HPACK来压缩标头,因此,使用一个为您执行HTTP / 2的Java库(具有更高级别的API)(而不是使用原始套接字)会更好。

[免责声明:我是Jetty的HTTP / 2实现者]

Jetty提供了一个低级HTTP / 2客户端,它允许您处理HTTP / 2帧,以及一个高级HTTP客户端,可以使用HTTP / 2格式发送通用HTTP请求。

对于第一个,您可以在这里找到一个示例: https : //github.com/eclipse/jetty.project/blob/jetty-9.4.18.v20190429/jetty-alpn/jetty-alpn-java-client/src/test/ java / org / eclipse / jetty / alpn / java / client / JDK9HTTP2ClientTest.java

对于第二个文档,有本节内容: https : //www.eclipse.org/jetty/documentation/9.4.x/http-client-transport.html#_http_2_transport

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM