检测Java中HTTP请求的结束

Mkl*_*Rjv 2 java http httprequest

我试图设计一个Java代理程序,但我的java程序在读取整个HTTP请求时遇到问题.

我使用该InputStream对象isObj尝试获取数据:

isObj.read(byteBuff)
Run Code Online (Sandbox Code Playgroud)

但这通常会导致数据无法完全读取.即,在POST请求的情况下,有时,只读取HTTP标题,而不读取POST数据.所以,我尝试使用下面的内容来完整地读取数据.

ByteArrayOutputStream baos=new ByteArrayOutputStream();
while((len=isObj.read(tempBuff))>0){
    baos.write(tempBuff,0,len);
}
byte[] byteBuff=baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

但是,这种方法也阻止了这个isObj.read(tempBuff)功能.

尝试使用DataInputStream的另一种方法,如:

DataInputStream dis=new DataInputStream(isObj);
byte[] byteBuff=new byte[8196];
dis.readFully(byteBuff);
Run Code Online (Sandbox Code Playgroud)

这也阻止了这个readFully()功能.

我仔细阅读并发现了这一点

检测HTTP请求正文的结束

这表明原因是我们无法确定何时数据将被解决(除非是为了响应).它要求我们使用Content-Length标头来检测最终长度.这绝对是读取HTTP请求的唯一方法吗?或者是否有其他库自动执行此操作?

use*_*529 5

你可以使用Apache的HttpComponents.HttpCore库提供了一个DefaultHttpRequestParser,它返回一个HttpRequest实例,其中包含从请求中获取头部和字段的方法.