[英]Java: Getting a 503 Error when trying to read webpage using HTMLUnit
[英]Getting 503 error when using JSoup to read an element from a webpage
因此,我一直在使用以下代码在给定方法中特定ID的情况下在页面上查找特定元素。 但是,当我未定义用户代理时,网站似乎返回403,而当我使用用户代理时却出现503错误。 该网站似乎使用cloudflare,据我所知,cloudflare可以用于防止DDOS攻击-因此,对于为什么我无法阅读该页面,我有些困惑?
public static String getMargin(final int id) {
String url = "https://rsbuddy.com/exchange?id=" + id + "&";
Document document = null;
try {
document = Jsoup.connect(url).timeout(30000)
.userAgent(
"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36")
.get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return document.select("#buy-price").text();
}
我将如何拥有它,以便最终可以从网页中读取该元素,而不是收到403禁止或503不可用错误? 谢谢。
您需要连接与ignoreHttpErrors
设置
Jsoup.connect(url).timeout(30000)
.ignoreHttpErrors(true)
...
页面内容将是您使用浏览器进行连接时看到的内容。 该页面包含一个小脚本(看起来像是在每个请求上生成的)。 该脚本将计算一个值,然后将其设置为以下表单的jschl-answer
字段:
<form id="challenge-form" action="/cdn-cgi/l/chk_jschl" method="get">
<input type="hidden" name="jschl_vc" value="some-generated-value">
<input type="hidden" name="pass" value="some-generated-value">
<input type="hidden" id="jschl-answer" name="jschl_answer">
</form>
表单必须使用正确的值提交(也请不要忘记获取/设置cookie)。
因此,关键点是通过找到他们的算法(这会很困难)或通过读取script
标记,对其进行修改以使其能够在本地运行并在本地执行来计算jschl-answer
。
总而言之,这并不是一件容易的事,但我认为这是可行的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.