Topic: 一个读取网页源文件的奇怪问题

  Print this page

1.一个读取网页源文件的奇怪问题 Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 16:16

我以前写的一个下载程序,原来是可以用的,前几天再用抛出了异常,看了他的输出确定了是获取源文件的问题。原来用java获取的源文件和察看源文件相同,现在就不同了
附上测试程序,运行输出和此网页的源文件

测试程序:

try
{
URL url=new URL("http://manhua.xfdm.com/9/1507/1.html");
URLConnection con=url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(),"gb2312"));
String line = null;
while ((line = reader.readLine()) != null)
System.out.println(line);
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
reader.close();
}

程序输出:

<div align="center"><a href="http://www.xfdm.com">进入幸福动漫,或3秒后自动进入</
a>
<script language="JavaScript">
var UrlTable = new Array();

UrlTable[0] = "http://www.xfdm.com/";
location.href=UrlTable[Math.round(Math.random()*(UrlTable.length-1))];

</script>
</div>
Press any key to continue...

用ie察看源文件所得到的html:

<HTML>
<HEAD>
<TITLE>幸运四叶草 第45话 第1画</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="幸运四叶草漫画,幸运四叶草在线漫画,幸运四叶草漫画最新连载,幸运四叶草漫画下载" name=keywords>
<META content="幸福动漫,幸运四叶草漫画,幸运四叶草在线漫画,幸运四叶草漫画最新连载,幸运四叶草漫画下载" name=description>
<LINK href="/images/index.css" type=text/css rel=stylesheet>
<BODY leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<script language=javascript src="/js/load.js"></script>
<table width="760" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><script language=javascript src="/js/head.js"></script></td>
</tr>
</table>
<TABLE width=760 border=0 align="center" cellPadding=0 cellSpacing=0>
<TBODY>
<TR>
<TD bgColor=#E4FCFB height=25> 您当前的位置:<a href='/default.html'>幸福动漫</a>
- <a href="../../../index.html">在线漫画</a> - <a href="../../../class/list_p_1.html">漫画列表</a>
- <a href='../../../class/list_p_X_1.html'>X</a> - <a href="../index.html"></a><a href='../index.html'>幸运四叶草</a></TD>
</TR>
<TR>
<TD bgColor=#013bc1 height=3></TD>
</TR>
</TBODY>
</TABLE>
<TABLE width="103%" border=0 cellPadding=0 cellSpacing=0>
<form>
<TR>
<TD height="26" align="center"><script language=javascript src="/js/ads1.js"></script>
上一页 <SELECT onchange=window.location=form.select2.options[form.select2.selectedIndex].value size=1 name=select2><OPTION value=1.html selected>第1页</OPTION> <OPTION value=2.html >第2页</OPTION> <OPTION value=3.html >第3页</OPTION> <OPTION value=4.html >第4页</OPTION> <OPTION value=5.html >第5页</OPTION> <OPTION value=6.html >第6页</OPTION> <OPTION value=7.html >第7页</OPTION> <OPTION value=8.html >第8页</OPTION> <OPTION value=9.html >第9页</OPTION> <OPTION value=10.html >第10页</OPTION> <OPTION value=11.html >第11页</OPTION> <OPTION value=12.html >第12页</OPTION> <OPTION value=13.html >第13页</OPTION> <OPTION value=14.html >第14页</OPTION> <OPTION value=15.html >第15页</OPTION> <OPTION value=16.html >第16页</OPTION> <OPTION value=17.html >第17页</OPTION> <OPTION value=18.html >第18页</OPTION> <OPTION value=19.html >第19页</OPTION> <OPTION value=20.html >第20页</OPTION> </SELECT> <a href='2.html'>下一页</a>
<script language=javascript src="/js/ads2.js"></script></TD>
</TR>
</form>
<TR>
<TD align="center" vAlign=top>
<IMG id=iphoto src="/js/loading.jpg" onload=foo(this) border="1"> </TD>
</TR>
<form>
<TR>
<TD height="25" align="center"><script language=javascript src="/js/ads3.js"></script>
上一页 <SELECT onchange=window.location=form.select2.options[form.select2.selectedIndex].value size=1 name=select2><OPTION value=1.html selected>第1页</OPTION> <OPTION value=2.html >第2页</OPTION> <OPTION value=3.html >第3页</OPTION> <OPTION value=4.html >第4页</OPTION> <OPTION value=5.html >第5页</OPTION> <OPTION value=6.html >第6页</OPTION> <OPTION value=7.html >第7页</OPTION> <OPTION value=8.html >第8页</OPTION> <OPTION value=9.html >第9页</OPTION> <OPTION value=10.html >第10页</OPTION> <OPTION value=11.html >第11页</OPTION> <OPTION value=12.html >第12页</OPTION> <OPTION value=13.html >第13页</OPTION> <OPTION value=14.html >第14页</OPTION> <OPTION value=15.html >第15页</OPTION> <OPTION value=16.html >第16页</OPTION> <OPTION value=17.html >第17页</OPTION> <OPTION value=18.html >第18页</OPTION> <OPTION value=19.html >第19页</OPTION> <OPTION value=20.html >第20页</OPTION> </SELECT> <a href='2.html'>下一页</a>
<script language=javascript src="/js/ads4.js"></script></TD>
</TR>
</form>
</TABLE>
<table width="760" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><script language=javascript src="/js/bottom.js"></script></td>
</tr>
</table>
</BODY></HTML>
<SCRIPT language=javascript>
document.all.iphoto.src = "/js/loading.jpg";
MM_showHideLayers('Layer2','','show');
document.all.iphoto.src ='http://comic.narutos.net/mh1/xiyuncao/45/JOJO_001.jpg';
</SCRIPT>

2.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: javadd
Posted on: 2006-06-16 16:51

必须判断连接状态

200才算连接成功!

这是对你这段程序不足之处的一个观点。

具体你必须把异常信息发出来看看。

3.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 16:57

我主要是截取了该html中一些链接,抛出的异常是截取链接中的数组越界,后来试了下读他的html才发现我读出来的源文件和ie察看的源文件是不同的
还有如何判断连接状态请大虾指点以下,谢谢

4.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: javadd
Posted on: 2006-06-16 17:01

HttpURLConnection conn = (HttpURLConnection) new URL(url)
          .openConnection();
      if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
        System.err.println("下载 " + url + " 失败!");
        return "";
      }

5.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 17:02

附上异常:

6.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: javadd
Posted on: 2006-06-16 17:10

这是你在做subString的时候指针越界.

7.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 17:13

谢谢大虾。不过没有连接是成功的

    try
    {
       String url2="http://manhua.xfdm.com/9/1507/1.html";
      HttpURLConnection conn = (HttpURLConnection) new URL(url2).openConnection();
      if (conn.getResponseCode() != HttpURLConnection.HTTP_OK)
      {
        System.err.println("下载 " + url2 + " 失败!");
      }
      System.out.println("no error!");

      BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"gb2312"));
      String line = null;
      while ((line = reader.readLine()) != null)
      System.out.println(line);
      reader.close();
    }
    catch (MalformedURLException e)
    {
      e.printStackTrace();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

输出:

no error!
<div align="center"><a href="http://www.xfdm.com">进入幸福动漫,或3秒后自动进入</
a>
<script language="JavaScript">
var UrlTable = new Array();

UrlTable[0] = "http://www.xfdm.com/";
location.href=UrlTable[Math.round(Math.random()*(UrlTable.length-1))];

</script>
</div>
Press any key to continue...

8.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 17:15

恩,因为我是在截取源文件里的一些链接
因为他给出的源文件和ie的察看源文件不同所以出现了越界

9.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: javadd
Posted on: 2006-06-16 17:15

用conn.getInputStream(),不需要建立两次连接,

连接太快,网站的过滤器会阻止你的连接.

所以获取的http状态不是200.

你可以将你的线程调小点.

10.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 17:19

现在我注释掉了前面3句
//      URL url=new URL("http://manhua.xfdm.com/9/1507/1.html");
//      URLConnection con=url.openConnection();
//      con.setDoInput(true);
输出还是一样

现在我没有用原来那个程序,而是重新写了个测试程序,就是我一开始的给出那段程序。应该不存在有太频繁的连接吧

再次谢谢大虾

11.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: elminsterjimmy
Posted on: 2006-06-16 20:36

现在发现程序的输出是http://manhua.xfdm.com的源文件。为什么得到的是host的源文件?不解吖

12.Re:一个读取网页源文件的奇怪问题 [Re: elminsterjimmy] Copy to clipboard
Posted by: cxp108
Posted on: 2006-06-19 10:45

elminsterjimmy wrote:
进入幸福动漫,或3秒后自动进入


LZ没有注意到Request被重定向了么?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923