Android InputStream после переписывания - PullRequest
2 голосов
/ 26 августа 2010

Я пытаюсь проанализировать XML-файл с веб-сайта. Допустим, веб-сайт "http://example.com"

Этот веб-сайт имеет настройку правила перезаписи htaccess для перенаправления чего-либо с префиксом "www" на хост обратно на example.com. поэтому "http://www.example.com" будет перенаправлять на" http://example.com"

В моем коде у меня есть URL, который я получаю InputStream из.

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 Ответ

3 голосов
/ 08 сентября 2010

Если кто-нибудь столкнулся с этой проблемой, как я, то вот решение. HttpURLConnection уже настроен на выполнение перенаправлений по умолчанию, если код ответа 300, 301, 302 или 303.

По какой-то причине сервер, с которого я выполняю анализ, должен иметь код ответа 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 может открыть поток ввода для правильного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...