0

我想做一个请求并从动态网站获得响应,如果我使用普通浏览器(如 chrome)执行此操作并查看源代码,这将显示所有文本(无 javascripts),但如果我尝试执行 wget 或 HttpClient 我得到用 javascripts 响应,没有文本。

文本是动态的,那么我如何才能收到最终的源代码(带有文本)?

请,如果不清楚,请按照以下步骤操作:

1 - 转到http://www.stj.jus.br/webstj/processo/Justica/detalhe.asp?numreg=201201911000&pv=010000000000&tp=51

2 - 检查元素并查看 detalhe.asp 的源代码

3 - 打开终端并使用 wget 获取此页面

现在你能看出区别了吗?

---- 编辑 ---- 如果有帮助,我尝试使用 HttpClient 执行此操作:

private static InputStream getPageSource(String url)  {
    InputStream inputStream = null;
    try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = httpclient.execute(new HttpGet(url));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                String responseString = out.toString();
                //..more logic
                System.out.println(responseString);

                inputStream = response.getEntity().getContent();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return inputStream;
}

---- EDIT 2 ---- 我完成了这项工作,将一个字段放在标题中:Referer

如果我在执行 httpclient 之前输入此行: get.setHeader("Referer", "http://www.stj.jus.br/webstj/processo/Justica/pagina_lista.asp"); 一切正常..所以,现在的问题是:

如何自动从 HttpClient 获取此参数(Referer)?

4

3 回答 3

0

我正在研究一个类似的问题,我不断遇到的答案是尝试http://htmlunit.sourceforge.net/ 它嵌入了一个 javascript 引擎。根据您的环境,Selenium的缺点是它需要安装浏览器才能与之交互。

于 2013-01-08T21:23:31.803 回答
0

抱歉,我的问题是安全性,出于安全原因,REFERER 必须设置为“http://www.stj.jus.br/webstj/processo/Justica/pagina_lista.asp”,所以重定向或像这样的任何东西,只是安全。

在我看不到这个之前,我发布了这个问题。

谢谢。

于 2012-11-29T13:12:19.750 回答
0

Wget 不执行浏览器的角色,因为它不解释和执行 javascript。它只是请求特定 URL 的资源并将其保存到文件中。如果您还想加载内容,那么您将需要访问 javascript 引擎。您可能想查看使用具有接口的Selenium 。JavascriptExecutor

于 2012-11-29T02:01:02.663 回答