может jsoup обрабатывать перенаправление метаобновления - PullRequest
7 голосов
/ 08 сентября 2011

У меня проблема с использованием jsoup. Я пытаюсь извлечь документ из URL-адреса, который будет перенаправлен на другой URL-адрес, на основе URL-адреса мета-обновления, который не работает, чтобы четко объяснить, вводим ли я URL-адрес веб-сайта с именем http://www.amerisourcebergendrug.com, который будет автоматически перенаправлен на http://www.amerisourcebergendrug.com/abcdrug/ в зависимости от URL-адреса мета-обновления, но мой jsoup по-прежнему придерживается http://www.amerisourcebergendrug.com и не перенаправляет и не получает с http://www.amerisourcebergendrug.com/abcdrug/

Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").get();

Я также пытался использовать,

Document doc = Jsoup.connect("http://www.amerisourcebergendrug.com").followRedirects(true).get();

, но оба не работают

Есть ли обходной путь для этого?

Обновление: Страницаможет использовать методы перенаправления метаобновления

Ответы [ 2 ]

13 голосов
/ 08 сентября 2011

Обновление (нечувствительно к регистру и довольно отказоустойчиво)


public static void main(String[] args) throws Exception {

    URI uri = URI.create("http://www.amerisourcebergendrug.com");

    Document d = Jsoup.connect(uri.toString()).get();

    for (Element refresh : d.select("html head meta[http-equiv=refresh]")) {

        Matcher m = Pattern.compile("(?si)\\d+;\\s*url=(.+)|\\d+")
                           .matcher(refresh.attr("content"));

        // find the first one that is valid
        if (m.matches()) {
            if (m.group(1) != null)
                d = Jsoup.connect(uri.resolve(m.group(1)).toString()).get();
            break;
        }
    }
}

правильно выводит:

http://www.amerisourcebergendrug.com/abcdrug/

Старый ответ:

Вы уверены, что это не работает? Для меня:

System.out.println(Jsoup.connect("http://www.ibm.com").get().baseUri());

.. выводит http://www.ibm.com/us/en/ правильно ..

2 голосов
/ 18 августа 2014

для лучшей обработки ошибок и проблем с чувствительностью к регистру

try
{
    Document doc = Jsoup.connect("http://www.ibm.com").get();
    Elements meta = doc.select("html head meta");
    if (meta != null)
    {
        String lvHttpEquiv = meta.attr("http-equiv");
        if (lvHttpEquiv != null && lvHttpEquiv.toLowerCase().contains("refresh"))
        {
            String lvContent = meta.attr("content");
            if (lvContent != null)
            {
                String[] lvContentArray = lvContent.split("=");
                if (lvContentArray.length > 1)
                    doc = Jsoup.connect(lvContentArray[1]).get();
            }
        }
    }

    // get page title
    return doc.title();

}
catch (IOException e)
{
    e.printStackTrace();
}
...