原本以为这个问题就这样解决了.可是发现蜘蛛过来后还是不正常..
报的错误是"无法使用前导 .. "
接下来就开始想如何可以重现这样的错误了.因为google 和 yahoo到底是什么捉的我们不是很清楚 但是可以看到的是他传递过来的一些参数.
开始模拟他们的一个访问过程.
首先我们需要一个数据的抓包工具..我用的是Wsockexpert (杀毒软件会报毒不传上来了)
用比较原始的TcpClient
private
void
button1_Click(
object
sender, EventArgs e)
{
string senddata;
StringBuilder sb = new StringBuilder();
sb.Append("GET /list/14/0.aspx HTTP/1.1\r\n");
//sb.Append("GET /default.aspx HTTP/1.1\r\n");
sb.Append("Accept: */*\r\n");
//sb.Append("Accept-Language: zh-cn\r\n");
//sb.Append("UA-CPU: x86\r\n");
sb.Append("Accept-Encoding: gzip\r\n");
//sb.Append("Accept-Encoding: gzip,deflate\r\n");
sb.Append("User-Agent:Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)\r\n");//mozilla 5.0 改成 4.0 就可以访问了
//sb.Append("User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Data Center; SV1; EzCenterExplorer; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)\r\n");
//sb.Append("User-Agent:Baiduspider+(+http://www.baidu.com/search/spider.htm)\r\n");
//sb.Append("User-Agent:Mozilla/5.0+(compatible;+Yahoo!+Slurp;+http://help.yahoo.com/help/us/ysearch/slurp)\r\n");//mozilla 5.0 改成 4.0 就可以访问了
//sb.Append("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4\r\n");
sb.Append("Host: www.lookcode.net\r\n");
sb.Append("Connection: Keep-Alive\r\n");
sb.Append("\r\n\r\n");
senddata = sb.ToString();
//sb.Append("");
TcpClient tcp = new TcpClient();
tcp.Connect("www.lookcode.net", 80);
NetworkStream stream = tcp.GetStream();
byte[] buffer = Encoding.UTF8.GetBytes(senddata);
stream.Write(buffer,0,buffer.Length);
stream.Flush();
byte[] buffer2 = new byte[20480];
int k = stream.Read(buffer2, 0, 20480);
string temp = Encoding.UTF8.GetString(buffer2, 0, k);
richTextBox1.Text = temp;
}
从iis的日记..加异常处理哪边我们可以得到一些参数
试了各种组合,我发现了尽然在 user agent 尽然起作用了.引发了这个异常.yahoo 错误 google 错误 baidu ie firefox都是正常的,但是不清楚哪个启了决定性的作用. 没有多大的办法判断是什么原因了.. user agent不添加也是成功的.
没有重写的情况下访问 default.aspx不管是谁的 user agent 都是成功的
我想 iis 处理 aspx这方面肯定是有一个bug了..人家哪样写跟你什么事.. 难道微软的程序员给他们的两个开的一个玩笑
但是我在服务端没有办法捕狱到这个异常. 调试的时候,不会有异常 用 try catch 尝试捕获 url重写 list pageload 不会得到这个异常 只能在 application error哪边得到这个异常用 last error放到日记文件. 最后面直接开把 web.config 的 error off 看到的错误跟日记记录的一样
我的配置
<LookFor>~/list/(\d*?)/(.*?).aspx</LookFor>
<SendTo>~/List.aspx?id=$1&start=$2</SendTo>
你写蜘蛛的时候也应该注意一下了..
附:调制WEB的技巧 iis哪边添加一个新的主机头 localhost ,然后在启动选项哪边 勾选 使用自定义服务器 并输入
http://localhost