小弟我第一次在CSDN上发帖。 我们在浏览器的地址栏输入网址回车后,就能看到相关网站的首页。浏览器的查看-->源文件,就能看到这个呈现在面前的网页的源文件。浏览器的基本功能就是把那些源文件翻译成漂亮的网页,这是很多人都知道的。 我想用JAVA写个小程序,能够把刚才说的那个“源文件”的内容用String的形式在后台打印出来。参考了一些人的程序以后,我写出了,但是却有个小问题,有些网页能够抓到,有的不能。 想抓的是自己用jsp做的系统,首页就是一个登陆的界面,也就是一个表单。我把地址、表单的账号、密码直接写在浏览器地址栏上是可以登陆并且看到登陆后的界面的,但是把输入地址栏的内容用程序去抓的时候却发现总是抛一个异常:
java.io.IOException:Server returned HTTP response code: 500 for URL:
貌似是访问的时候出现了500异常,所以url读流的时候读不到,同样的url我复制到浏览器的地址栏却是能够正常返回的;
然后换了一个asp系统,用同样的方式却发现能够抓到登陆后首页的源代码。 不知道有没有谁还碰到过类似的事情,或者给点意见。我在百度、谷歌上搜了,但是没有找到能解决的办法,所以只好发帖问问各位大虾了。
下面是我用来抓网页源程序的代码:
package com.czjxj.sfgl.test; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import junit.framework.TestCase; public class URLTest extends TestCase { private String getURLOutput(String strUrl) {
StringBuffer codeBuffer = null;
BufferedReader in = null;
try {
URLConnection uc = new URL(strUrl).openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
// 读取url流内容
in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
codeBuffer = new StringBuffer();
String tempCode = "";
// 把buffer内的值取出来保存到code中
while ((tempCode = in.readLine()) != null) {
codeBuffer.append(tempCode).append("\n");
}
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return codeBuffer.toString();
} public void testURL() {
String url="http://10.145.65.9/testWEB/loginservlet?yhdh=90001&mm=888888";
String s = this.getURLOutput(url);
System.out.println(s);
}
}
java.io.IOException:Server returned HTTP response code: 500 for URL:
貌似是访问的时候出现了500异常,所以url读流的时候读不到,同样的url我复制到浏览器的地址栏却是能够正常返回的;
然后换了一个asp系统,用同样的方式却发现能够抓到登陆后首页的源代码。 不知道有没有谁还碰到过类似的事情,或者给点意见。我在百度、谷歌上搜了,但是没有找到能解决的办法,所以只好发帖问问各位大虾了。
下面是我用来抓网页源程序的代码:
package com.czjxj.sfgl.test; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection; import junit.framework.TestCase; public class URLTest extends TestCase { private String getURLOutput(String strUrl) {
StringBuffer codeBuffer = null;
BufferedReader in = null;
try {
URLConnection uc = new URL(strUrl).openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
// 读取url流内容
in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
codeBuffer = new StringBuffer();
String tempCode = "";
// 把buffer内的值取出来保存到code中
while ((tempCode = in.readLine()) != null) {
codeBuffer.append(tempCode).append("\n");
}
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return codeBuffer.toString();
} public void testURL() {
String url="http://10.145.65.9/testWEB/loginservlet?yhdh=90001&mm=888888";
String s = this.getURLOutput(url);
System.out.println(s);
}
}
为了进度,改用ASP读取并成功了,4、5楼的建议我试试。以前还真没用过你们说的那两个东东。