通过套接字连接的多个HTTP请求

时间:2014-09-27 19:01:44

标签: java sockets http tcp

我想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);


            }

1 个答案:

答案 0 :(得分:2)

主要错误是,您没有正确解析响应。 响应由一个HTTP标头后跟主体(可能)组成。要获取正文,您必须解析并理解响应头,尤其是代码(某些代码没有正文),Transfer-Encoding和Content-length。然后你还应该看一下Connection标题。 只有这样你才能知道身体的长度,以及是否接受了此连接上的进一步请求。

除了那些行应该由\ r \ n分隔,而不仅仅是\ n和println一样。

总结:如果您真的想在自己的研究中实施HTTP必要的文档(RFC2616或更新的RFC7230..RFC7235)。如果您不喜欢这样,请使用现有的HTTP库。