java处理BufferedReader中的空行
我收到一位客户的发帖请求:
HTTP method: POST
Host: 127.0.0.1:52400
Connection: keep-alive
Content-Length: 18
Pragma: no-cache
Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate
Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2
fname=foof&pw=bar
我运行了一个小型且非常简单的Java Web服务器,从InputStream获取这个请求。 在BufferedReader中,我将数据设置为包含请求的字符串,如下所示:
for (String line; (line = in.readLine()) != null; ) {
if (line.isEmpty()) break;
header += line + "\n";
}
当我将标题打印到控制台时,我得到以下信息:
POST / HTTP/1.1
Host: 127.0.0.1:52400
Connection: keep-alive
Content-Length: 18
Pragma: no-cache
Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate
Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2
忽略POST参数
我猜这个问题是因为POST请求中的空行发生的。
如何确保BufferedReader将请求读到最后,并且不在空行处停止,尽管在BufferedReader到达请求末尾时停止
请忽略本例中缺乏安全性的问题——我现在只需要将POST请求转换为纯字符串表示
谢谢你的帮助! 杰斯珀
# 1 楼答案
问题是因为
break
循环中有一个for
。当到达空白行时,它命中^ {< CD1> }并退出循环,此后不添加任何行。相反,你应该使用以下方法:通过使用
continue
而不是break
,循环将继续进行下一次迭代,并且可以添加其余的行更多信息请参见here