может ли jsoup обрабатывать перенаправление обновления meta
у меня есть проблема с использованием 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();
но оба не работают
любое обходное решение для этого?
обновление: Страница может использовать методы перенаправления meta refresh
2 ответов
Update (нечувствительный к регистру и довольно отказоустойчивый)
- контент парсится (почти) по spec
- на сначала успешно проанализированы метаданные контента следует использовать
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/
правильно..
чтобы иметь лучшую обработку ошибок и проблему чувствительности к регистру
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();
}