想实现采集需要登录的页面,百度,google了一下,也在论坛搜了一下发现大部分都是用“post”的方法获得cookie后在打开要采集的页面但我看了火车头采集器,貌似用了很先进的方法就是在设置规则的时候,用火车头自带的浏览器打开需要登录的网站,登录一下,然后它会自动记录cookie,然后每次采集它就会自动登录的虽然不知道它自带的浏览器是怎么样的但感觉就是先获得一个登录后的cookie,保存到数据库,每次采集的时候传一下cookie我现在已经得到了一个cookie
但不知道怎么把cookie传到HttpWebRequest中

解决方案 »

  1.   

    string cookieheader = "a_apache_id=218.108.221.238"  //设置cookies
                string url = tb1.Text;
                string content;
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
                myRequest.Method = "POST";
                myRequest.KeepAlive = true;
                myRequest.ContentType = "application/x-www-form-urlencoded";
                CookieContainer cookieCon = new CookieContainer();
                myRequest.CookieContainer = cookieCon;
                myRequest.CookieContainer.SetCookies(new Uri(url), cookieheader);            HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse();
                Stream s = response.GetResponseStream();
                StreamReader objReader = new StreamReader(s, System.Text.Encoding.GetEncoding("GB2312"));
                content = objReader.ReadToEnd();
    我这段代码获取的到还是未登录的!
      

  2.   

     //首次登陆 
                string strFirstPageRequestUrl = "http://xxx.com";
                HttpWebRequest reqFirstPage = (HttpWebRequest)WebRequest.Create(strFirstPageRequestUrl);
              //Utility.Get="GET";
                reqFirstPage.Method = Utility.Get;
                reqFirstPage.KeepAlive = true;
                reqFirstPage.AllowAutoRedirect = true;
                reqFirstPage.UseDefaultCredentials = true;
                //设置cookie信息
                reqFirstPage.CookieContainer = new CookieContainer();
                //reqFirstPage.Proxy = wp;
                //userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值
                // Utility.UserAgent= "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 1.1.4322; .NET CLR 3.5.20404)";
                reqFirstPage.UserAgent = Utility.UserAgent;            //得到请求之后的返回值            HttpWebResponse resFirstPage = (HttpWebResponse)reqFirstPage.GetResponse();
                CookieCollection ccFirstPage = new CookieCollection();
               
                //Utility.SetCookie="Set-Cookie"
                if (resFirstPage.Headers[Utility.SetCookie] != null)
                {
                    Debug.WriteLine("Headers 不为空 值为 >> "+reqFirstPage.Headers[Utility.SetCookie]);
                    //给Cookie集合 添加Cookie信息 
                    //当需要获得服务器返回的Cookie的话,可以通过wrp.Headers.Get("Set-Cookie")方法来获取。
                    ccFirstPage.Add(Utility.GetAllCookiesFromHeader(resFirstPage.Headers[Utility.SetCookie], resFirstPage.ResponseUri.Host));
                }
                //得到返回的页面信息  得到登录页面信息
                StreamReader sr1 = new StreamReader(resFirstPage.GetResponseStream());
                String strFirstPage = sr1.ReadToEnd();
                Debug.WriteLine("返回的信息 >> "+strFirstPage+"\n");
                sr1.Close();
                string strLoginPageUrlReferer = resFirstPage.ResponseUri.ToString();
                resFirstPage.Close();
                reqFirstPage.Abort();
      

  3.   

    我已经用post的方法了!先将就一下!结贴