代码之家  ›  专栏  ›  技术社区  ›  Casebash

url.openStream有害吗?

  •  6
  • Casebash  · 技术社区  · 14 年前

    我用的是 java.net.URL.openStream() 方法从服务器检索内容。我最近遇到了一个问题,其中HTTP响应代码指示了一个错误,但是没有抛出异常,流仍然被读取。这导致错误出现在执行的很晚的时候,并被证明是一个红鲱鱼。据我所知,当您使用此方法打开流时,无法检查HTTP响应代码。

    我能找到的唯一正确处理这个问题的方法就是获得一个连接 之前

    HttpURLConnection conn=(HttpURLConnection) url.openConnection()
    #Code updated with scotth's suggestion
    if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
        throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
    rawIn=conn.getInputStream()
    
    InputStream in=conn.getInputStream()
    

    你同意吗?有没有什么好的环境可以安全地使用openStream,或者应该不鼓励使用它。值得注意的是,Sun在他们的应用程序中使用了这种方法 tutorial code for reading directly from a URL . 同样,代码抛出异常,因此它并不是良好编码实践的堡垒。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Scott Heaberlin    14 年前

    openStream()

    但是,正如您所发现的,它的抽象性非常高,因此如果您希望了解与资源交互的任何细节,您需要 openConnection() 你觉得合适就投吧。

    RFC2616 -如果你所关心的只是“成功”,你可以检查一下 String.valueOf(conn.getResponseCode()).startsWith('2')