繁体   English   中英

使用JSoup从网页读取元素时出现503错误

[英]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

总而言之,这并不是一件容易的事,但我认为这是可行的。

Jsoup并不是这里的最佳工具。 在访问实际页面之前,需要解决一个挑战。 我建议您使用以下工具之一:

您头疼会减轻...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM