首先,我想道歉,以防我的问题可能没有提供足够的连接或任何重要的事情,我现在正在手机上输入这个。
所以我正在开展一个项目,要求我在网页中自动执行任务,为了做到这一点,第一步是首先访问页面,但我已经遇到了障碍我试图搜索和找出无济于事。
我试图通过CloudFlare获得DDoS保护的网页,这意味着在进入该页面之前,您的浏览器会被检查几秒钟然后通过。
我正在使用外部库HtmlUnit,它为我提供了我需要的一切,当访问页面时,我得到一个503 error
,说我无法访问它,相当确定这是保护阻止它。
现在我的问题是我应该如何绕过它。有一个.jar
我反编译并查看哪个与我相同的网站,但它对我来说太难以理解了。
非常感谢这项任务的帮助,谢谢。
供参考,以下是使用CloudFare进行测试的网页示例www.osbot.org(这不是网站BTW)。
如果您还需要其他任何内容,请告诉我并再次抱歉仅提供文字,在手机上输入此内容并且我目前无法访问PC。
修改:无法将我的IP列入白名单或与网站所有者联系
答案 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列入白名单。如果你正在做任何事情,比如试图抓住网站,那么他们可能不会要你。