我希望通过以下代码从网址获取网页内容:
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:数据库管理系统将继续管理.....
你能给我解决问题的解决方案吗? 提前致谢
答案 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所述)会发送重定向。