小弟我第一次在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); 


解决方案 »

  1.   

    http://10.145.65.9/testWEB/loginservlet?yhdh=90001&mm=888888换成127.0.0.1试试吧,应该是你的url有问题,和是jsp还是asp没关系。
      

  2.   

    我写了用jsp试了一下发现没有问题,楼主肯定是那个页面有什么特殊的地方
      

  3.   

    那是不是你们的服务器做了什么限制,你可以试试用httpClient模拟浏览器.
      

  4.   

    用httpclient可以实现你想要的结果,或者用htmlparse
      

  5.   


    为了进度,改用ASP读取并成功了,4、5楼的建议我试试。以前还真没用过你们说的那两个东东。