使用Cloudflare保护访问网页

时间:2015-08-26 16:47:30

标签: java htmlunit cloudflare

首先,我想道歉,以防我的问题可能没有提供足够的连接或任何重要的事情,我现在正在手机上输入这个。

所以我正在开展一个项目,要求我在网页中自动执行任务,为了做到这一点,第一步是首先访问页面,但我已经遇到了障碍我试图搜索和找出无济于事。

我试图通过CloudFlare获得DDoS保护的网页,这意味着在进入该页面之前,您的浏览器会被检查几秒钟然后通过。

我正在使用外部库HtmlUnit,它为我提供了我需要的一切,当访问页面时,我得到一个503 error,说我无法访问它,相当确定这是保护阻止它。

现在我的问题是我应该如何绕过它。有一个.jar我反编译并查看哪个与我相同的网站,但它对我来说太难以理解了。

非常感谢这项任务的帮助,谢谢。

供参考,以下是使用CloudFare进行测试的网页示例www.osbot.org(这不是网站BTW)。

如果您还需要其他任何内容,请告诉我并再次抱歉仅提供文字,在手机上输入此内容并且我目前无法访问PC。

修改:无法将我的IP列入白名单或与网站所有者联系

3 个答案:

答案 0 :(得分:0)

默认情况下,HtmlUnit抛出异常(这不是真正的浏览器所做的),这是有目的的。

无论如何,您可以使用webClient.getOptions()。setThrowExceptionOnFailingStatusCode(false)。

此外,您需要wait,下面是一个示例:

    try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        String url = "http://www.osbot.org/";
        HtmlPage htmlPage = webClient.getPage(url);
        webClient.waitForBackgroundJavaScript(10_000);
        System.out.println(htmlPage.asText());
    }

答案 1 :(得分:0)

我知道这个问题已经很老了,但是还没有正确的答案。这是对我有用的东西:

WebClient client = new WebClient(BrowserVersion.CHROME);

client.getOptions().setCssEnabled(false);
client.getOptions().setJavaScriptEnabled(true);
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setRedirectEnabled(true);
client.getCache().setMaxSize(0);
client.waitForBackgroundJavaScript(10000);
client.setJavaScriptTimeout(10000);
client.waitForBackgroundJavaScriptStartingBefore(10000);

try {

    String url = "https://www.badlion.net/";

    HtmlPage page = client.getPage(url);

    synchronized(page) {
        page.wait(7000);
    }
    //Print cookies for test purposes. Comment out in production.
    URL _url = new URL(url);
    for(Cookie c : client.getCookies(_url)) {
        System.out.println(c.getName() +"="+c.getValue());
    }

    //This prints the content after bypassing Cloudflare.
    System.out.println(client.getPage(url).getWebResponse().getContentAsString());
} catch (FailingHttpStatusCodeException e) {
    e.printStackTrace();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch(InterruptedException e) {
    e.printStackTrace();
}

只需将String url = "https://badlion.net/";替换为您尝试访问的URL。

答案 2 :(得分:-2)

您应该询问网站所有者是否可以将您的IP列入白名单。如果你正在做任何事情,比如试图抓住网站,那么他们可能不会要你。