从URL获取页面内容?

时间:2010-11-18 15:28:39

标签: java url

我希望通过以下代码从网址获取网页内容:

public static String getContentResult(URL url) throws IOException{

    InputStream in = url.openStream();
    StringBuffer sb = new StringBuffer();

    byte [] buffer = new byte[256];

    while(true){
        int byteRead = in.read(buffer);
        if(byteRead == -1)
            break;
        for(int i = 0; i < byteRead; i++){
            sb.append((char)buffer[i]);
        }
    }
    return sb.toString();
}

但是使用此网址:http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315  我无法得到Asbtract:数据库管理系统将继续管理.....

你能给我解决问题的解决方案吗? 提前致谢

4 个答案:

答案 0 :(得分:3)

输出get请求的标头:

HTTP/1.1 302 Moved Temporarily
Connection: close
Date: Thu, 18 Nov 2010 15:35:24 GMT
Server: Microsoft-IIS/6.0
location: http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE
Content-Type: text/html; charset=UTF-8

这意味着服务器希望您下载新位置地址。因此,您可以直接从UrlConnection获取标题并关注该链接,也可以自动使用HttpClient自动跟踪重定向。以下代码基于HttpClient

public class HttpTest {
    public static void main(String... args) throws Exception {

        System.out.println(readPage(new URL("http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE&CFID=114782066&CFTOKEN=85539315")));
    }

    private static String readPage(URL url) throws Exception {

        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url.toURI());
        HttpResponse response = client.execute(request);

        Reader reader = null;
        try {
            reader = new InputStreamReader(response.getEntity().getContent());

            StringBuffer sb = new StringBuffer();
            {
                int read;
                char[] cbuf = new char[1024];
                while ((read = reader.read(cbuf)) != -1)
                    sb.append(cbuf, 0, read);
            }

            return sb.toString();

        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

答案 1 :(得分:0)

给定网址上没有“数据库管理...”。也许,它是由动态加载的。您需要有更复杂的应用程序才能下载此类内容;)

答案 2 :(得分:0)

您要查找的内容未包含在此网址中。打开浏览器并查看源代码。而是加载了许多javascript文件。我认为AJAX调用后来会提取内容。您需要了解内容的加载方式。

Firfox插件Firebug可能有助于更详细的分析。

答案 3 :(得分:0)

您应该使用的网址是:

http://portal.acm.org/citation.cfm?id=152610.152611&coll=DL&dl=GUIDE

因为您发布的原始网址(如dacwe所述)会发送重定向。

相关问题