問題のjsoupがメタリフレッシュリダイレクトを処理できるのと非常によく似たメタリフレッシュリダイレクトからHTMLページを取得したいと思います。
しかし、私はそれを機能させることができません。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を抽出して2回目の接続を行った後でも、一時的なランディングページのコンテンツを取得します。これは、本文のプリンスに表示されます。
では、ここで何が問題になっているのでしょうか。
注意として、サイトsynchronkartei.deは常にHTTPSにリダイレクトします。また、StartComからの証明書を使用しているため、Javaは証明書パスについて文句を言います。上記のコードスニペットを機能させるには、VMパラメーター-Djavax.net.ssl.trustStore=<path-to-keystore>
を正しい証明書で使用する必要があります。