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

在重写器之后的Android输入流

  •  2
  • Pzanno  · 技术社区  · 15 年前

    我正试图从一个网站解析一个XML文件。假设网站是“ http://example.com

    此网站有一个htaccess重写规则设置,可以将带有“www”前缀的任何内容重定向回主机example.com。所以“ http://www.example.com “将重定向到” http://example.com网站

    在我的代码中,我有一个URL,它是我得到的输入流。

    protected InputStream getInputStream() {
        try {
            return feedUrl.openConnection().getInputStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    

    在这种情况下,feedURL指向“ http://www.example.com/file.xml “当我执行以下操作时:

    try {
        Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    

    我得到一个例外,我相信它不会重定向到“ http://example.com/file.xml

    显然,我可以静态地更改feedurl变量指向的位置,但我需要它是动态的。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Pzanno    15 年前

    如果有人像我一样碰到这个问题,那么这里是解决办法。如果响应代码为300、301、302或303,则httpurlConnection已设置为默认情况下遵循重定向。

    出于某种原因,我从中解析的服务器需要将响应代码设置为307,Android不会自动重定向。

    我建议使用不同的响应代码,但是如果您的服务器需要它,那么这里有解决方法。

    HttpURLConnection conn = (HttpURLConnection) feedUrl.openConnection();
    int responseCode = conn.getResponseCode();
    if( responseCode == 307 ){
        String location = conn.getHeaderField("location");
        feedUrl = new URL(location);
        conn = (HttpURLConnection) this.feedUrl.openConnection();
    }
    

    现在,conn可以打开正确文件的输入流。

    推荐文章