我采集一个人才网的个人信息!~我模拟了该网站的登陆,用post形式传回需要的参数,并保存下HttpWebReponse返回的cookie!另一个人才网站用这样的已经成功!  并且讲求该网站的登陆页需要设置头文件的cookie。请高手们分析一下,为什么post回去参数以后,不能登陆成功呢?

解决方案 »

  1.   

    如果你用.NET开发,你可以用WebBrowse控件.也就是IE,去采集.这样可以少处理很多事.
      

  2.   

    同志们啊,分这么多,咋都没有人来解答呢?string urlChinaHr = "http://ehr.chinahr.com/login.aspx";
    CookieContainer containerChinaHr = WebTreatment.GetCookieFromPost(urlChinaHr, Encoding.Default, postData);
    string htmlChinaHr = WebTreatment.GetHtmlFromGet("http://ehr.chinahr.com", Encoding.Default, containerChinaHr);
      

  3.   

    /// <summary>
        /// 实现登录
        /// </summary>
        /// <param name="targetURL">请求的路径,必须是实现登录的路径(*)</param>
        /// <param name="cc">用于维持cookies Or Session</param>
        /// <param name="param">Post提交的信息(用户名,密码)</param>
        /// <returns>html page</returns>
        public static  CookieContainer cc = new CookieContainer();//维持cookie或Session
        public static string PostAndGetHTML(string targetURL, Hashtable param)
        {
          
            //formData用于保存提交的信息
            string formData = "";
            foreach (DictionaryEntry de in param)
            {
                formData += de.Key.ToString() + "=" + de.Value.ToString() + "&";
            }        if (formData.Length > 0)
                formData = formData.Substring(0, formData.Length - 1); //去除最后一个 '&'        //把提交的信息转码(post提交必须转码)
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] data = encoding.GetBytes(formData);        //开始创建请求
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetURL);
            request.Method = "POST";    //提交方式:post
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";
            request.AllowAutoRedirect = true;
            request.KeepAlive = true;
       
            Stream newStream = request.GetRequestStream();
            newStream.Write(data, 0, data.Length);//将请求的信息写入request
            newStream.Close();
            request.CookieContainer = cc;        //向服务器发送请求
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();        //获得Cookie 保存到Appliction中
            string cookieHeader = request.CookieContainer.GetCookieHeader(new Uri("http://login.xiaonei.com/Login.do"));
            HttpContext.Current.Application.Lock();
            HttpContext.Current.Application["cookieHeader"] = cookieHeader;
            HttpContext.Current.Application.UnLock();
          
            return "OK";
        }    /// <summary>
        /// 访问其他页面
        /// </summary>
        /// <param name="strUrl"></param>
        /// <returns></returns>
        public static string ReGetHtml(string strUrl)
        {
            //第二次请求
            HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(strUrl);
            string cookhead = HttpContext.Current.Application["cookieHeader"].ToString();
            request1.Method = "GET";
            request1.Headers.Add("cookie:"+cookhead);
            request1.KeepAlive = true;
            request1.AllowAutoRedirect = true;        HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
            Stream stream2 = response1.GetResponseStream();//获得回应的数据流
            //将数据流转成 String
            string result1 = new StreamReader(stream2, System.Text.Encoding.UTF8).ReadToEnd();
            return result1;
        }
      

  4.   

    小弟也遇到过类似问题,已经用httpwebrequest登录,能正常获取信息。但有一个页面除外,返回老是和IE不同,但不提示错误,最后改用WebBrowse了。
      

  5.   

    webbrowse得手动!~~  不知道可以自动不能?
      

  6.   

    主要是coooooooooooookies 的问题。
    看看你的cookies有没丢失,跨域时,是不是部分cookies丢失了。
    除此之外,还有一个referer标头要注意一下。别的都不是问题。