请问各位大牛,如何获得需要登录的网站的登录后的网页内容,有网站用户名和密码,按照网上搜索的一些内容,做了如下代码,但是时灵时不灵,大多数时候都不好使,但是有时候又好用,不知道为什么?代码如下,请各位大侠帮忙解答一下,非常感谢。public static string PostData(string url, string indata, CookieContainer  
                              myCookieContainer)
        {
            string outdata = "";
            HttpWebRequest myHttpWebRequest =(HttpWebRequest)WebRequest.Create(url);
            myHttpWebRequest.AllowAutoRedirect = true;
            myHttpWebRequest.KeepAlive = true;
  
            myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
            myHttpWebRequest.ContentLength = indata.Length;
            myHttpWebRequest.Method = "POST";
            myHttpWebRequest.CookieContainer = myCookieContainer;            Stream myRequestStream = myHttpWebRequest.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, 
                                          Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(indata);
            myStreamWriter.Close();
            myRequestStream.Close();            HttpWebResponse myHttpWebResponse = 
                            (HttpWebResponse)myHttpWebRequest.GetResponse();
            myHttpWebResponse.Cookies = 
                   myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
            Stream myResponseStream = myHttpWebResponse.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, 
                                          Encoding.GetEncoding("gb2312"));
            outdata = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();            return outdata;
        }        //获取网页内容的按键
        private void button_GetNetContent(object sender, EventArgs e)
        {
            CookieContainer myCookieContainer = new CookieContainer();            string url = "https://login.taobao.com/";//登录页面的链接
            
            //要发送的用户名和密码
            string loginfo = "TPL_username=xxx&TPL_password=xxx";
            
            string outdataStr;
            string filename = FilePath.Text;            //先登录
            outdataStr = PostData(url, loginfo, myCookieContainer); 
            url = "http://i.taobao.com/my_taobao.htm?";//登录后,要查询的子网页
                       outdataStr = PostData(url, "", myCookieContainer);//返回目标页面                     if (saveToFileSel.Checked)//保存页面内容到文件
            {
                FileStream fileStream = new FileStream(filename, 
                        FileMode.OpenOrCreate, FileAccess.Write);                byte[] byteSave = 
                   Encoding.GetEncoding("GB2312").GetBytes(outdataStr); 
            
                fileStream.Write(byteSave, 0, byteSave.Length);                fileStream.Close();
            }
        }获取网页内容 URL c#url获取网页内容HttpWebResponse

解决方案 »

  1.   

    时灵时不灵指的是什么?
    登录失败,还是登录成功但是获取到的网页源代码不正确?
    你抓网页的使用的gb2312,但是有很多网页是其他格式编码(比如utf8)。这个地方要改成网站对应的编码。
      

  2.   

    1, 时灵时不灵指的是有时候能够登录成功,抓取到登录后的页面;大多数时候抓到的都是登录页面,用HttpAnalyzerStdV6分析看到的是,抓取登录后的页面时,发送的请求并重定向到登录页面了。感觉登录时cache没有被对后续页面的访问共用;
    2,编码方式只是会导致显示格式不对,比如乱码什么的,不影响抓取的数据,只影响显示;
    3,webBrowser没有试过,不知道我上面的代码为什么不成功。