zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    实习日记11
    实习日记10
    实习日记9
    实习日记7
    我自己的颜色库
    实习日记5
    实习日记4
    算法导论2:几个习题 2016.1.2
    算法导论1:插入排序和归并排序 2016.1.1
    和算法导论没什么关系0.手电筒过桥问题详解
  • 原文地址:https://www.cnblogs.com/lovebanyi/p/810597.html
Copyright © 2011-2022 走看看