繁体   English   中英

Java Socket未收到HTTP请求的正文

[英]Java Socket not receiving body of http request

我正在尝试仅使用Java中的SocketBufferedReader类读取HTTP请求。 问题是我无法达到请求的正文部分。 缓冲读取器仅向我提供请求行和标头。 这是代码的一部分:

bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String comando = "";
        while((msgDoSocket = bufferedReader.readLine()) != null){
            //telaOutput.adicionaFim(msgDoSocket);
            try {
                comando += msgDoSocket + " ";
                //System.out.println(comando);
                if(msgDoSocket.isEmpty()){
                    processaInput(comando);
                }
            } catch (Exception ex) {
                Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


这是WireShark捕获,显示正在发送POST正文。 我的程序在端口15000上运行,数据只是一个字符串“ teste12345”。 我正在使用Google chrome的应用程序POSTMAN发送请求。

在此处输入图片说明

我在这个线程中描述了完全相同的问题,但是那里提出的解决方案没有用。 该请求仍会到达最后一个标头,仅此而已。 提前致谢。

编辑:问题解决了! 根据对答案提出的建议,我将阅读内容更改为:

reader = new DataInputStream(socket.getInputStream());


String comando = "";
while( (dt = reader.readByte()) >= 0){
  comando += dt;
  //... do the rest of the stuff
}

以二进制形式读取它可以到达请求的body部分。

我远非Java专家,但我敢打赌,当readLine找到\\r\\n序列时,它只会返回结果。 由于您的身体没有以\\r\\n终止,因此readLine方法永远不会返回。 尝试将字符序列手动添加到您的正文中,看看会发生什么,或者使用原始的InputStreamReader将正文作为字节数组读取。

但是,您不能指望任何http正文实际上是字符串。 它也可以是对\\r\\n一无所知的二进制序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM