3

Kabum という Web ストアの URL で困っています。

URL はhttp://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159です。

アドレスバーにサイトを入力するか、リンクをクリックすると、製品のページが表示されますが、Jsoup を使用すると、同じアドレスへのメタ リフレッシュのみのページが表示されます。

ユーザー エージェント、リファラーを設定して、メタのリンクをたどってみましたが、同じページが表示されました。

私のコードはここにあります:

Document doc;
String url = "http://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159";
try {
    String ua = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0";
    String referrer = "http://www.google.com";
    doc = Jsoup.connect(url).timeout(20000).userAgent(ua).referrer(referrer).get();
    Elements meta = doc.select("html head meta");
    for (Iterator<Element> it = meta.iterator(); it.hasNext();) {
        Element element = it.next();
        if (element.attr("http-equiv").matches("refresh")) {
            String novaUrl = element.attr("content").replaceFirst("\\d?;url=", "");
            System.out.printf("redirecting to %s%n", novaUrl);
            doc = Jsoup.connect(novaUrl).userAgent(ua).referrer(referrer).get();
            break;
        }
    }
} catch (IOException ex) {
    Logger.getLogger(Teste1.class.getName()).log(Level.SEVERE, null, ex);
    return;
}
System.out.println(doc);
4

2 に答える 2

2

とても興味深い。

ええ、次の行:<meta http-equiv="refresh" content="0;url=kabum.com.br/cgi-local/kabum3/produtos/…; />ブラウザに現在の URL を更新するように指示しています。

したがって、サーバーが探している基準が満たされるまで、ページがブラウザにページを更新し続けるように指示しているように見えます。

サーバーが探している基準を把握する必要があります。最初に確認することは、(1) jsoup に設定されているリダイレクト制限 (「リダイレクトに従う」機能があり、そのmetaタグを理解できる場合)、および (2) Cookie です。

于 2012-05-18T14:44:32.773 に答える
2

Cookie を使用してリクエストを再送信する必要があります。サイトは、次のリクエストで見られると予想される 1 つのセッション Cookie を返しています。

String url = "http://www.kabum.com.br/cgi-local/kabum3/produtos/descricao.cgi?id=01:02:23:55:159";
Map<String, String> cookies = Jsoup.connect(url).execute().cookies();
Document document = Jsoup.connect(url).cookies(cookies).get();
System.out.println(document.html());

同じセッションで起動する後続のすべてのリクエストで同じ Cookie を使用する必要があることに注意してください。

于 2012-05-18T14:57:41.220 に答える