【问题标题】:HtmlUnit bypassing cloudflare DDOS and cookies required需要 HtmlUnit 绕过 cloudflare DDOS 和 cookie
【发布时间】:2019-09-24 16:57:48
【问题描述】:

我正在尝试抓取一个使用 Cloudflare 的页面,直到最近这还没有出现任何问题。但是截至昨天,我遇到了 503(ddos 保护页面)。而今天它转变为简单的 403。检查响应我可以看到页面正在请求我启用 cookie。我目前正在使用 HtmlUnit 执行刮擦,并且将 BrowserVersion 设置为 Chrome。

这是我目前的尝试:

    private HtmlPage scrapeJS(String targetUrl) throws ScrapeException {
        Log.verbose("Attempting JS scrape ...");
        WebClient client = new WebClient(BrowserVersion.CHROME);
        client.getOptions().setJavaScriptEnabled(true);
        client.getOptions().setCssEnabled(css);
        client.getOptions().setUseInsecureSSL(insecureSSL);
        client.setCookieManager(new CookieManager());
        client.getOptions().setRedirectEnabled(true);

        HtmlPage page;

        try {
            page = client.getPage(targetUrl);
            client.waitForBackgroundJavaScript(10000);
        } catch (FailingHttpStatusCodeException e){
            Log.verbose("JS scrape resulted in " + e.getStatusCode());
            throw new ScrapeException(source, e);
        } catch (IOException e){
            throw new ScrapeException(source, e);
        }

        return page;
    }

我应该提一下,这在我的桌面上的 cookie 检查和 503 都失败了,但它没有通过我的笔记本电脑(这是一个 mac)上的 cookie 检查。

我环顾了一下,但大多数处理 HtmlUnit 的帖子似乎有点过时,并且解决方案(例如等待后台 JS)不起作用,也无法在 firefox 和 chrome 之间更改用户代理。

【问题讨论】:

  • 可能是因为 SSL
  • 第一次请求失败还是多次请求失败?
  • 嘿,Erik,您在这里找到解决方案了吗?我也有同样的问题:)
  • @SpasBobchev 我没有,最终找到了一个绕过此问题的站点 API

标签: java web-scraping htmlunit


【解决方案1】:

我在这里解决了https://stackoverflow.com/a/69760898/2751894

只需使用以下 jvm 属性之一:

-Djdk.tls.client.protocols="TLSv1.3,TLSv1.2" 或 -Dhttps.protocols="TLSv1.3,TLSv1.2"

【讨论】:

  • 不要发布重复的答案。如果那里的答案回答了这里的问题,请标记/投票以关闭链接该帖子的帖子。否则,请针对此特定问题调整您的答案。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 2021-10-15
  • 2016-01-19
  • 2021-01-26
  • 1970-01-01
  • 2016-11-19
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多