簡體   English   中英

TCP套接字HTTP GET請求內容長度> 0,但未返回實際內容

[英]TCP Socket HTTP GET Request Content-Length > 0 but not returning actual Content

我正在嘗試使用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-8
Content-Length: 55
Date: Thu, 24 Jan 2019 15:45:00 GMT
Connection: close

響應表明應該基於Content-Length提供一些內容,但是我從未真正接收到該內容本身。 是否有可能做到這一點? 任何意見是極大的贊賞。

找到空行時,您將停止閱讀。 有一條空行將標題和內容分開,因此您只是不閱讀內容。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM