在做一个工厂自动登陆的软件,用C#开发, 我想法是用C#内嵌的webBrowser登陆,取出所有的cookie(系统没有httponly的cookie)。然后,把cookie写到HttpWebRequest的CookieContainer里。再打开登陆后的页面URL.但是不成功,请各位大师指点,或者给点思路,多谢了。

解决方案 »

  1.   

    采集COOKIE
                string cookieStr = wb1.Document.Cookie;   //取webrowser的cookie
                string[] cookstr = cookieStr.Split(';');
                foreach (string str in cookstr)
                {
                    System.Net.CookieCollection ccl = new System.Net.CookieCollection();
                    string[] cookieNameValue = str.Split('=');
                    cookieName = cookieNameValue[0].Trim().ToString();
                    cookieValue = cookieNameValue[1].Trim().ToString();                string[] cookstrValue = cookieValue.Split(',');
                    cookieValue = cookstrValue[0].Trim().ToString();
                    Cookie ck = new Cookie(cookieName, cookieValue);
                    myCookieContainer.Add(ck);   //这是一个全局对象
                }
    用webrowser的cookie放到HttpWebRequest里
                HttpWebRequest request;
                HttpWebResponse response;            request = WebRequest.Create(urlStr) as HttpWebRequest;
                request.Method = "GET";
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.Headers["Accept-Language"] = "zh-cn";
                request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
                request.CookieContainer = myCookieContainer;
                request.KeepAlive = true;
                request.AllowAutoRedirect = true;            //获取服务器返回的资源
                using (response = (HttpWebResponse)request.GetResponse())
      

  2.   

    http://bbs.csdn.net/topics/390474102
    你的情况是否跟他类似,把你的要取的url地址也贴出来吧
      

  3.   

    CookieContainer dd = new CookieContainer();
                    string str = PostStr;
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(PostDiZhi);
                    request.Accept = "application/json,text/javascript,*/*;q=0.01";
                    request.Headers["Accept-Language"] = "zh-cn";
                    request.UserAgent = "Mozilla/5.0 ";
                    request.KeepAlive = true;
                    request.Referer = Referer;
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Method = "POST";
                    request.Headers.Add("x-requested-with", "XMLHttpRequest");
                     dd.Add(new Uri(PostDiZhi), new Cookie("uuid", cookie1)); 
                    request.CookieContainer = dd;
                    Encoding encoding = Encoding.UTF8;//根据网站的编码自定义  
                    byte[] postData = encoding.GetBytes(str);//Str即为发送的数据  
                    request.ContentLength = postData.Length;
                    Stream requestStream = request.GetRequestStream();
                    requestStream.Write(postData, 0, postData.Length);
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    response.Cookies = dd.GetCookies(request.RequestUri);
                    Stream responseStream = response.GetResponseStream();
                    //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可  
                    if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))
                    {
                        responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
                    }
                    StreamReader streamReader = new StreamReader(responseStream);
                    streamReader.Close();
                    responseStream.Close();
    这是一个以前用过的post方法贴给你具体内容可以自行修改,希望能帮到你