我想对服务器进行 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);
}
最佳答案
主要错误是您没有正确解析响应。 响应由 HTTP header 和正文(可能)组成。要获取正文,您必须解析并理解响应 header ,尤其是代码(有些代码没有正文)、传输编码和内容长度。然后您还应该查看连接 header 。 只有这样您才知道正文的长度以及此连接是否接受进一步的请求。
除此之外,行应该由\r\n 分隔,而不仅仅是像 println 那样用\n 分隔。
总之:如果你真的想自己实现 HTTP,请学习必要的文档(RFC2616 或更新的 RFC7230..RFC7235)。如果您不喜欢这样,请使用现有的 HTTP 库。
关于java - 通过套接字连接的多个 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26078104/