为什么ServerXMLHTTP获取网页源代码不完整?

时间:2022-11-10 18:04:24
测试发现,当网页很庞大的时候,ServerXMLHTTP仅能获取一部分源代码:

    Byte[] b = (Byte[])xmlhttp.responseBody;//数组最大值:163840,即:160*1024

而用XMLHTTP则可以完整获取所有源代码,或者说XMLHTTP方式还没有达到最高限制?
请问高手这是为什么,以及如何采用ServerXMLHTTP获取完整的网页源代码?
测试网址:http://www.baidu.com/s?q1=%B2%E2%CA%D4&q2=&q3=&q4=&rn=100&lm=0&ct=0&ft=xls&q5=&q6=&tn=baiduadv

3 个解决方案

#1


本帖最后由 net_lover 于 2012-08-12 09:00:13 编辑
。net下面使用HttpWebRequest或者WebClient吧,可以进行更好地控制

#2


引用 1 楼  的回复:
。net下面使用HttpWebRequest或者WebClient吧,可以进行更好地控制

另外换测试网址发现其他网站可以正常获取完整源代码。

我猜测可能是百度限制了每次包的大小最大为163840,如果超过这个数的网页就必须分割为多个包分别发送。而在多个包面前由于ServerXMLHTTP每次请求都不保存会话,并且独立于页面会话。而XMLHTTP则是保存会话并于IE请求同步cookie等的。所以当第二个包发送过来时,ServerXMLHTTP不能接收,而XMLHTTP则可以接收。

如果上面猜测成立的话,那有什么办法可以使ServerXMLHTTP也能获取完整源代码吗?按理说ServerXMLHTTP比XMLHTTP更健壮的。

另外我想请教一下ServerXMLHTTP异步模式下的waitForResponse的原理,或者源代码。

我在XMLHTTP开启异步时用一个Timer来捕获异步完成,这种方式可以实现等待异步完成,就是不知道和waitForResponse是不是有效率上的差异。

谢谢!

#3


该回复于2012-08-12 21:42:32被版主删除

#1


本帖最后由 net_lover 于 2012-08-12 09:00:13 编辑
。net下面使用HttpWebRequest或者WebClient吧,可以进行更好地控制

#2


引用 1 楼  的回复:
。net下面使用HttpWebRequest或者WebClient吧,可以进行更好地控制

另外换测试网址发现其他网站可以正常获取完整源代码。

我猜测可能是百度限制了每次包的大小最大为163840,如果超过这个数的网页就必须分割为多个包分别发送。而在多个包面前由于ServerXMLHTTP每次请求都不保存会话,并且独立于页面会话。而XMLHTTP则是保存会话并于IE请求同步cookie等的。所以当第二个包发送过来时,ServerXMLHTTP不能接收,而XMLHTTP则可以接收。

如果上面猜测成立的话,那有什么办法可以使ServerXMLHTTP也能获取完整源代码吗?按理说ServerXMLHTTP比XMLHTTP更健壮的。

另外我想请教一下ServerXMLHTTP异步模式下的waitForResponse的原理,或者源代码。

我在XMLHTTP开启异步时用一个Timer来捕获异步完成,这种方式可以实现等待异步完成,就是不知道和waitForResponse是不是有效率上的差异。

谢谢!

#3


该回复于2012-08-12 21:42:32被版主删除