java - Jsoup 元刷新重定向

标签 java redirect refresh jsoup meta

我想从元刷新重定向中获取一个 HTML 页面,与问题 can jsoup handle 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 并进行第二次连接后,我仍然获得临时登录页面的内容,这可以在正文的 prinln 中看到。

那么这里出了什么问题呢?

请注意,网站 synchronkartei.de 始终重定向到 HTTPS。由于它使用 StartCom 的证书,因此 java 会提示证书路径。为了让上面的代码片段工作,需要使用VM参数-Djavax.net.ssl.trustStore=<path-to-keystore>具有正确的证书。

最佳答案

我必须承认,我不是 Jsoup 方面的专家,但我了解 Synchronkartei 的一些细节。

Deutsche Synchronkartei 支持 OpenSearchDescriptions,其链接位于/search.xml。也就是说,您还可以使用 https://www.synchronkartei.de/search.php?search={searchTerms} 将搜索词放入 session 中。

您所需要的只是 Synchronkartei 为您提供的带有 session ID 的 cookie“sid”。之后,直接请求 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,则完全忽略结果,但保护 session cookie。之后,您向 https://www.synchronkartei.de/index.php?action=search 发出请求,它应该会为您提供完整的结果列表。

芬兹

关于java - Jsoup 元刷新重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655547/

相关文章:

python - 使用 Python 跟踪重定向和 cookie

java - 一对多映射,不重复

java - GAE 的 ReSTLet Swagger 扩展使用指南

apache - .htaccess 从一个域重定向到另一个域,包括子域

http - 将 HTTP 重定向到 HTTPS 时如何处理 Nginx 中的 400 错误

ajax - 使用定期 AJAX/XMLHttpRequest 调用时如何修复浏览器的内存增长?

android - 改进 android listview 的刷新和滚动性能

jquery - 如何使用 jquery 1.7.2 获取当前显示的选项卡索引

java - 捕获被调用的方法属于哪个类

java - 我有一个 double 组,我需要获得中位数,但它一直给我一个 int 转换错误