2013-03-27 2 views
0

Я хочу, чтобы страница HTML из мета-обновления была перенаправлена ​​так же, как в вопросе can jsoup handle meta refresh redirect.Jsoup meta refresh redirect

Но я не могу заставить его работать. Я хочу сделать поиск по http://synchronkartei.de. У меня есть следующий код:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

public class SynchronkarteiScraper { 
    public static void main(String[] args) throws Exception{ 
    Document doc = Jsoup.connect("https://www.synchronkartei.de/search.php") 
             .data("cat", "2") 
             .data("search", "Thomas Danneberg") 
             .data("action", "search") 
             .followRedirects(true) 
             .get(); 
    Elements meta = doc.select("html head meta");         
    for (final Element m : meta){ 
     if (m.attr("http-equiv").contains("refresh")){ 
     doc = Jsoup.connect(m.baseUri()+m.attr("content").split("=")[1]).get(); 
     } 
    } 

    System.out.println(doc.body().toString()); 
    } 
} 

Это поиск, что приводит к временному сайту, который получает обновился открывает реальный результат страницу. Это то же самое, что и для http://synchronkartei.de, выбрав «Sprecher» из выпадающего списка, введя «Thomas Danneberg» в текстовое поле и нажав Enter.

Но даже после извлечения URL-адреса обновления и второго подключения я до сих пор получаю содержимое временной целевой страницы, которое можно увидеть в принтере тела.

Итак, что здесь не так?

В качестве примечания, сайт synchronkartei.de всегда перенаправляется на HTTPS. И поскольку он использует сертификат от StartCom, java жалуется на путь сертификата. Чтобы использовать вышеприведенный фрагмент кода, необходимо использовать параметр VM -Djavax.net.ssl.trustStore=<path-to-keystore> с правильным сертификатом.

ответ

1

Должен признать, что я не эксперт в Jsoup, но я знаю некоторые подробности о Synchronkartei.

Deutsche Synchronkartei поддерживает OpenSearchDescriptions, который связан с /search.xml. Тем не менее, вы также можете использовать https://www.synchronkartei.de/search.php?search={searchTerms}, чтобы получить свой поисковый запрос в сеансе.

Все, что вам нужно, это «sid» cookie с идентификатором сеанса, предоставленным Synchronkartei. После этого прямой запрос на https://www.synchronkartei.de/index.php?action=search предоставит вам результаты независимо от вашего реферера.

Что я имею в виду, сначала отправьте запрос на https://www.synchronkartei.de/search.php?search={searchTerms} или https://www.synchronkartei.de/search.php?cat={Category}&search={searchTerms}&action=search (как вы это делали выше) и полностью проигнорируете результат, если он имеет результат HTTP из 200, но безопасен для cookie сеанса. После этого вы размещаете запрос на https://www.synchronkartei.de/index.php?action=search, который должен предоставить вам весь список результатов.

Funzi

+0

Со вчерашнего Synchronkartei поддерживает '/? Д = {SEARCHTERM}' без печенья или перенаправления. – Funzi

+0

Спасибо за помощь. Выполнение этого с помощью файлов cookie. Но у меня есть вопрос о методе '/? Q = {searchTerm}. Я не привык к OpenSearchDescriptions, так что извините, возможно, тупой вопрос. Можно ли искать только одну строку или есть способ еще больше отфильтровать результат, чтобы получить, например, только участников с данной строкой поиска (как в примере в моем исходном сообщении)? – radlan

+0

Привет радлан, на данный момент нет возможности фильтровать ваши результаты для актеров или фильмов при использовании /? Q = {searchTerm}. Но если вы используете /search.php?cat={category}&search={searchterm}, вы можете заменить категорию на 1 (Все), 2 (голос актеров), 3 (киноактеры), 4 (фильмы), 5 (ТВ серия) и 6 (участие в кино). – Funzi

 Смежные вопросы

  • Нет связанных вопросов^_^