我想HTTP GET服务器,读取数据,然后再次通过相同的套接字连接进行HTTP GET或POST。 但是我无法得到第二个请求的响应。以下代码可能出错:
Socket s = new Socket(InetAddress.getByName("xyz.abc.asd"), 80);
InputStream is=s.getInputStream();
OutputStream os=s.getOutputStream();
PrintWriter pwGET = new PrintWriter(os);
pwGET.println("GET /login/ HTTP/1.1");
pwGET.println("Host: xyz.abc.asd");
pwGET.println("Connection: keep-alive");
pwGET.println("");
pwGET.flush();
BufferedReader brGET = new BufferedReader(new InputStreamReader(is));
String t=null;
while((t = brGET.readLine()) != null) {
System.out.println(t);
}
pwGET.println("GET /login/ HTTP/1.1");
pwGET.println("Host: xyz.abc.asd");
pwGET.println("Connection: keep-alive");
pwGET.println("");
pwGET.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
t=null;
while((t = br.readLine()) != null) {
System.out.println(t);
}
答案 0 :(得分:2)
主要错误是,您没有正确解析响应。 响应由一个HTTP标头后跟主体(可能)组成。要获取正文,您必须解析并理解响应头,尤其是代码(某些代码没有正文),Transfer-Encoding和Content-length。然后你还应该看一下Connection标题。 只有这样你才能知道身体的长度,以及是否接受了此连接上的进一步请求。
除了那些行应该由\ r \ n分隔,而不仅仅是\ n和println一样。
总结:如果您真的想在自己的研究中实施HTTP必要的文档(RFC2616或更新的RFC7230..RFC7235)。如果您不喜欢这样,请使用现有的HTTP库。