【问题标题】:File not found exception while reading connection.getInputStream()读取 connection.getInputStream() 时找不到文件异常
【发布时间】:2011-04-08 11:45:46
【问题描述】:

我在服务器 URL 上发送请求,但我收到 File not found 异常,但当我通过 Web 浏览器浏览此文件时,它似乎很好。

URL url = 新 URL(serverUrl); 连接 = getSecureConnection(url);

            // Connect to server
            connection.connect();

            // Send parameters to server
            writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
            writer.write(parseParameters(CoreConstants.ACTION_PREFIX + actionName, parameters));
            writer.flush();

            // Read server's response
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

当我尝试 getInputStream 时,它会抛出错误文件未找到。 它是一个 .aspx 控制器页面。

【问题讨论】:

  • 确保您的网址正确且格式正确
  • 如果 URL 不正确,尽管 URL 正确,但在尝试打开与 URL 的连接时应该会出错。

标签: java android iis exception inputstream


【解决方案1】:

如果请求在浏览器中可以正常工作,但在代码中不能正常工作,并且您已验证 URL 相同,那么问题可能与您将参数发送到服务器的方式有关。具体来说,这部分:

writer.write(parseParameters(CoreConstants.ACTION_PREFIX + actionName, parameters));

parseParameters() 函数中可能存在错误?

但更一般地说,我建议使用比原始URLConnection 更高级别的东西。 HtmlUnit 和 HttpClient 都是不错的选择,尤其是因为您的请求似乎相当简单。我已经在许多应用程序中使用两者来执行类似的客户端/服务器交互。我建议修改你的代码以使用这些库之一,然后看看它是否仍然产生错误。

【讨论】:

  • 服务器返回响应码 411。所以我认为 IIS 服务器端有错误
  • @Aizaz - 你检查过HTTP Code 411 Documentation吗?可能会有所帮助。服务器似乎希望在请求上设置 Content-Length 标头。这是浏览器自动执行的操作,但 URLConnection 不会。因此,我认为如果您只是设置此标头(在 URLConnection 上手动设置,或者通过切换到我提到的库之一,它会像浏览器一样自动执行此操作),您会很好。
  • 是的,亲爱的,我已经设置了 Content-Length,但仍然没有用。我不知道 IIS 有什么问题 :( 真的让我很生气。
  • 我不能使用任何 3rd 方库,最有趣的是我用错误的参数调用服务器函数然后它返回给我 ok 响应:(
【解决方案2】:

好的,最后我发现问题出在 IIS 端,它已在 .Net 4.0 中得到解决。对于以前的版本,请转到您的 web.config 并指定 validateRequest==false

【讨论】:

  • 转到您的 IIS 端 web.config
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
相关资源
最近更新 更多