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()
功能.
我仔细阅读并发现了这一点
这表明原因是我们无法确定何时数据将被解决(除非是为了响应).它要求我们使用Content-Length标头来检测最终长度.这绝对是读取HTTP请求的唯一方法吗?或者是否有其他库自动执行此操作?
你可以使用Apache的HttpComponents.HttpCore库提供了一个DefaultHttpRequestParser,它返回一个HttpRequest实例,其中包含从请求中获取头部和字段的方法.