亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TCP Socket HTTP GET 請求 Content-Length > 0 但不返回實際內容

TCP Socket HTTP GET 請求 Content-Length > 0 但不返回實際內容

慕神8447489 2022-05-21 16:39:52
我正在嘗試使用 TCP 套接字而不是 HTTPClient 查詢托管在 Tomcat/Spring Boot 應用程序上的 REST API 服務,因為我不能使用 HTTPClient。我能夠成功打開套接字、發送請求并從服務器接收數據,但服務器響應中從未返回任何正文或內容。如果我使用網絡瀏覽器查詢相同的 URL,它就可以正常工作。這是我用來發出請求的程序:import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;public class SocketClient {    public SocketClient() {        String hostname = "192.168.10.104";        int port = 8080;        try (Socket socket = new Socket(hostname, port)) {            OutputStream output = socket.getOutputStream();            PrintWriter writer = new PrintWriter(output, false);            writer.println("GET /company/1 HTTP/1.1");            writer.println("Host: " + hostname + ":" + port);            writer.println("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");            writer.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");            writer.println("Accept-Language: en-US,en;q=0.9");            writer.println("Accept-Encoding: gzip, deflate, br");            writer.println("Connection: close");            writer.println();            writer.flush();            InputStream input = socket.getInputStream();            BufferedReader reader = new BufferedReader(new InputStreamReader(input));            String line;            while (!(line = reader.readLine()).equals("")) {                System.out.println(line);            }            socket.close();        } catch (Exception ex) {            System.out.println("Server not found: " + ex.getMessage());        }    }}服務器響應以下數據:HTTP/1.1 200 Content-Type: text/html;charset=UTF-8Content-Length: 55Date: Thu, 24 Jan 2019 15:45:00 GMTConnection: close響應表明應該有一些基于 Content-Length 的內容,但我從未真正收到內容本身。是否有可能做到這一點?任何意見是極大的贊賞。
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

當你發現一個空行時,你停止閱讀。有一個空行將標題與內容分開,所以你只是沒有閱讀內容。

當服務器關閉連接時,readLine 返回 null。將循環更改為

while (!(line = reader.readLine()) == null)


查看完整回答
反對 回復 2022-05-21
  • 1 回答
  • 0 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號