【问题标题】:Jsoup meta refresh redirectJsoup 元刷新重定向
【发布时间】:2013-03-17 08:08:18
【问题描述】:

我想从与问题can jsoup handle meta refresh redirect 非常相似的元刷新重定向中获取 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”并回车。

但即使在提取刷新URL并进行第二次连接后,我仍然得到临时登陆页面的内容,可以在body的prinln中看到。

那么这里出了什么问题?

请注意,站点 synchronkartei.de 始终重定向到 HTTPS。由于它使用的是 StartCom 的证书,java 抱怨证书路径。要让上面的代码 sn -p 工作,需要使用带有正确证书的 VM 参数-Djavax.net.ssl.trustStore=<path-to-keystore>

【问题讨论】:

    标签: java redirect refresh jsoup meta


    【解决方案1】:

    我不得不承认,我不是 Jsoup 方面的专家,但我知道 Synchronkartei 的一些细节。

    Deutsche Synchronkartei 支持 OpenSearchDescriptions,链接在 /search.xml。也就是说,您也可以使用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 发出请求,该请求应该会为您提供整个结果列表。

    芬子

    【讨论】:

    • 从昨天开始,Synchronkartei 支持/?q={searchTerm},无需 cookie 或重定向。
    • 感谢您的帮助。使用 cookie 进行操作。但我对/?q={searchTerm} 方法有疑问。我不习惯 OpenSearchDescriptions,很抱歉这个可能很愚蠢的问题。是否只能搜索单个字符串,或者是否有办法进一步过滤结果以获取例如具有给定搜索字符串的演员(如我原始帖子中的示例)?
    • 嗨 radlan,目前无法在使用 /?q={searchTerm} 时过滤演员或电影的结果。但是如果你使用 /search.php?cat={category}&search={searchterm},你可以将类别替换为 1(全部)、2(配音演员)、3(电影演员)、4(电影)、5(电视)系列)和6(电影参与)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2018-08-08
    • 2012-07-26
    • 2019-11-13
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多