有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    问题是因为break循环中有一个for。当到达空白行时,它命中^ {< CD1> }并退出循环,此后不添加任何行。相反,你应该使用以下方法:

    for (String line; (line = in.readLine()) != null; ) {
        if (line.isEmpty()) continue;
        header += line + "\n";
    }
    

    通过使用continue而不是break,循环将继续进行下一次迭代,并且可以添加其余的行

    更多信息请参见here