【发布时间】:2014-06-24 10:40:16
【问题描述】:
我正在尝试设计一个 Java 代理程序,但我的 Java 程序在读取整个 HTTP 请求时遇到问题。
我使用InputStream对象isObj尝试获取数据:
isObj.read(byteBuff)
但这通常会导致无法完全读取数据。即在 POST 请求的情况下,有时仅读取 HTTP 标头而未读取 POST 数据。所以,我尝试使用下面的方法来完全读取数据。
ByteArrayOutputStream baos=new ByteArrayOutputStream();
while((len=isObj.read(tempBuff))>0){
baos.write(tempBuff,0,len);
}
byte[] byteBuff=baos.toByteArray();
不过,这个方法也被isObj.read(tempBuff)函数阻塞了。
尝试使用 DataInputStream 的另一种方法,例如:
DataInputStream dis=new DataInputStream(isObj);
byte[] byteBuff=new byte[8196];
dis.readFully(byteBuff);
这也在readFully() 函数中被阻止。
我通读并发现了这个
Detect end of HTTP request body
这表明原因是我们无法确定数据何时结束(除非是为了响应)。它要求我们使用 Content-Length 标头来检测最终长度。这绝对是读取 HTTP 请求的唯一方法吗?或者是否有任何其他库可以自动执行此操作?
【问题讨论】:
标签: java http httprequest