簡體   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