Url重写 与 google yahoo 蜘蛛(2)

原本以为这个问题就这样解决了.可是发现蜘蛛过来后还是不正常..
报的错误是"无法使用前导 .. "

接下来就开始想如何可以重现这样的错误了.因为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, 020480);

            
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&amp;start=$2</SendTo>
你写蜘蛛的时候也应该注意一下了..

附:调制WEB的技巧 iis哪边添加一个新的主机头 localhost ,然后在启动选项哪边 勾选 使用自定义服务器 并输入 http://localhost
原文地址:https://www.cnblogs.com/lovebanyi/p/810597.html