工作页面上的Java HtmlUnit 301状态代码

时间:2015-07-20 18:00:08

标签: java jsoup htmlunit

尝试通过htmlUnit加载页面时,我总是得到一个301 error,即使完全相同的页面在浏览器中正常加载。

给我错误的代码是

public String getPage(String url) {
    try {
        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setRedirectEnabled(false);
        webClient.getOptions().setUseInsecureSSL(true);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        // webClient.getOptions().setTimeout();

        final HtmlPage page = webClient.getPage(url);
        return page.asText();
    } catch (IOException ex) {
        Logger.getLogger(Worker.class.getName()).log(Level.SEVERE, null, ex);
    } catch (FailingHttpStatusCodeException ex) {
        Logger.getLogger(Worker.class.getName()).log(Level.SEVERE, null, ex);
    }
    return null;
}

其中urlhttp://www.instagram.com/name(也尝试过https,同样的错误)

返回的错误是

> Jul 20, 2015 1:52:20 PM com.gargoylesoftware.htmlunit.WebClient
> printContentIfNecessary INFO: statusCode=[301] contentType=[text/html]
> Jul 20, 2015 1:52:20 PM com.gargoylesoftware.htmlunit.WebClient
> printContentIfNecessary INFO: <html> <head><title>301 Moved
> Permanently</title></head> <body bgcolor="white"> <center><h1>301
> Moved Permanently</h1></center> <hr><center>nginx</center> </body>
> </html>

然而,当我从浏览器转到http://www.instagram.com/name时,它会很好地加载。我听说Jsoup可能对我想要做的事情有用(获取页面文本),但我对htmlUnit更熟悉。如果你有我的代码或其他方法的修复,那么我很乐意尝试。

1 个答案:

答案 0 :(得分:1)

我刚刚在浏览器中查看过。 301也在普通浏览器中发生。 301是永久性的&#34;重定向到

https://instagram.com/name

您可以通过

设置selenium webdriver的重定向行为
webClient.getOptions().setRedirectEnabled(true);

关于Jsoup:

如果您尝试解析的页面是直接加载的,并且AJAX没有填充重要的DOM元素,那么Jsoup确实是更好的选择。它比硒实例快得多。我尽可能地更喜欢Jsoup。如果您需要更灵活地获取页面,那么您可能需要查看Apache HttpClient,我经常使用它来获取页面。我仍然使用JSoup,但仅用于解析,而不是实际上从网上获取页面。但是,如果工作很简单,并且您的网络访问不受代理和类似的阻碍,您可以简单地使用JSoup连接。 Selenium非常适合测试以及需要运行客户端JavaScript的情况。这个价格是它的记忆饥渴和缓慢。