0

我正在尝试通过http监控apache服务器。我正在使用的代码如下所示。

byte[] buffer = new byte[8192];
byte[] outputBuffer = new byte[8192];
int bytesRead = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {
    BufferedInputStream bis = new BufferedInputStream(sourceUrl.openStream());
    while (true) {
    bytesRead = bis.read(buffer);
        if (bytesRead == -1)
            break;

        baos.write(buffer, 0, bytesRead);
    }
    bis.close();
    outputBuffer = baos.toByteArray();
    baos.close();

    return outputBuffer;
}catch{}

我期望这些值作为名称-值对。但有时我得到如下所示

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
    <head>
      <META HTTP-EQUIV="Refresh" CONTENT="0;URL=LoginAction.action">
      </head>
      <body>
        <p>Loading ...</p>
      </body>
  </html>

为什么会这样。我应该在代码中做什么来获得正确的值?请帮忙

4

1 回答 1

0

该行<META HTTP-EQUIV="Refresh" CONTENT="0;URL=LoginAction.action"> 表示用户代理(又名浏览器)应通过加载相对 URL 来刷新页面LoginAction.action。所以你的问题在于服务器/会话状态,而不是从流中读取的代码。

顺便说一句,您的使用BufferedInputStream已经完全过时了。您可以直接从InputStream返回的 by中读取URL.openStream()

进一步,byte[] outputBuffer = new byte[8192];是胡说八道。您永远不会使用您在此处创建的数组,因为您会用baos.toByteArray(). 只需声明变量byte[] outputBuffer;就足够了。

于 2013-11-12T08:52:36.920 回答