Я пытаюсь запросить службу REST API, размещенную в приложении Tomcat / Spring Boot, используя сокет TCP вместо HTTPClient, поскольку я не могу использовать 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, но я никогда не получаю сам контент.Можно ли сделать это?Любой совет с благодарностью.