[英]Java Socket not receiving body of http request
我正在尝试仅使用Java中的Socket
和BufferedReader
类读取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.