0

問題の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>を正しい証明書で使用する必要があります。

4

1 に答える 1

1

私はJsoupの専門家ではないことを認めなければなりませんが、Synchronkarteiについての詳細は知っています。

Deutsche Synchronkarteiは、/search.xmlでリンクされているOpenSearchDescriptionsをサポートしています。そうは言ってもhttps://www.synchronkartei.de/search.php?search={searchTerms}、検索語をセッションに取り込むために使用することもできます。

必要なのは、セッションIDを持つCookie「sid」だけです。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

于 2013-05-03T09:38:57.537 に答える