string strurl = "http://www.clicksaya.com/website/default.aspx";        string postData = "ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=tencent@vip.qq.com&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=111111&__EVENTVALIDATION=/wEWCAKg48mdDwLwptrHBQKevaaZCAKH1uKjCgLAkIr5BALfmYj5BALNws3TBgKy3p7hAVb6TE/A0Hu49JhH/87U1q1++i+8&__VIEWSTATE=/wEPDwUKMTA2NjEzMTQ5N2QYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRJbWFnZUJ1dHRvbjEFMmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRjYlJlbWVtYmVyBS9jdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJHdlYnNpdGVMb2dpbjEkaWJMb2dpbr835ABpAJS3gOqaobgPreac5MNP&ctl00$sm=ctl00$up1|ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin&__ASYNCPOST=true";
        HttpWebRequest reqt = (HttpWebRequest)WebRequest.Create(strurl);
        CookieContainer myCookieContainer = new CookieContainer();
        reqt.CookieContainer = myCookieContainer;
        cookieheader = reqt.CookieContainer.GetCookieHeader(new Uri(strurl));
        reqt.Method = "POST";
        reqt.ContentType = "application/x-www-form-urlencoded";
        reqt.AllowAutoRedirect = true;
        byte[] strbyte = Encoding.UTF8.GetBytes(postData);
        Stream strm = reqt.GetRequestStream();
        strm.Write(strbyte, 0, strbyte.Length);
        strm.Close();
        HttpWebResponse resp = (HttpWebResponse)reqt.GetResponse();
        

解决方案 »

  1.   

    cookieheader 总是为空是什么原因呢?还有,CookieContainer myCookieContainer = new CookieContainer(); 
            reqt.CookieContainer = myCookieContainer; 
    这样老感觉没意义,因为前面没给值,后面又没有用到。。
      

  2.   

    取cookie的方法google一下,有用API取的
      

  3.   

    也许你所访问的网站并没有在客户端留下cookie,所以为空.
      

  4.   

    private string HttpWebRequestLogin(string loginUrl, string postData, ref CookieContainer cookieContainer) 

        byte[] bdata = Encoding.Default.GetBytes(postData); 
        System.Net.HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(loginUrl); 
        myRequest.Method = "POST"; 
        myRequest.ContentType = "application/x-www-form-urlencoded"; 
        myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
        myRequest.Referer = loginUrl; 
        myRequest.KeepAlive = true; 
        myRequest.AllowAutoRedirect = true; 
        if (cookieContainer == null) 
            cookieContainer = new CookieContainer(); 
        myRequest.CookieContainer = cookieContainer; 
        myRequest.ContentLength = bdata.Length; 
        Stream newStream = myRequest.GetRequestStream(); 
        newStream.Write(l_data, 0, bdata.Length); 
        newStream.Close(); 
        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 
        StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("GB2312")); 
        string content = reader.ReadToEnd(); 
        return content; 

     
     
      

  5.   

    CookieContainer myCookieContainer = new CookieContainer();
            reqt.CookieContainer = myCookieContainer;
            cookieheader = reqt.CookieContainer.GetCookieHeader(new Uri(strurl)); 
    刚创建的CookieContainer是空的,不会有任何值在里面要取得返回的Cookie 在request.GetResponse以后用HttpWebResponse.Cookies楼上代码Stream newStream = myRequest.GetRequestStream();
        newStream.Write(l_data, 0, bdata.Length);
        newStream.Close(); Close不自动Flush需要手动
      

  6.   

    但是,我在查看 HttpWebResponse.Cookies 的数目的时候,还是0.
    请问这是什么原因?
      

  7.   

    70|error|500|The state information is invalid for this page and might be corrupted.最后出现这个问题是怎么回事呢?麻烦高手回答。
      

  8.   

    我在本地写了一个测试页面测试。但是我用这个去测试的时候到
    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 报500错误了。请问一下,这是怎么回事呢?
      

  9.   

    ctl00$sm ctl00$up1|ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin
    ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername asdf
    ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword
    ctl00$ContentPlaceHolder1$websiteLogin1$tbwe1_ClientState
    ctl00$ContentPlaceHolder1$websiteLogin1$tbwe2_ClientState
    __LASTFOCUS
    __VIEWSTATE /wEPDwUKMTA2NjEzMTQ5N2QYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgMFNGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRJbWFnZUJ1dHRvbjEFMmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcjEkd2Vic2l0ZUxvZ2luMSRjYlJlbWVtYmVyBS9jdGwwMCRDb250ZW50UGxhY2VIb2xkZXIxJHdlYnNpdGVMb2dpbjEkaWJMb2dpbr835ABpAJS3gOqaobgPreac5MNP
    __EVENTTARGET
    __EVENTARGUMENT
    __EVENTVALIDATION /wEWCAKg48mdDwLwptrHBQKevaaZCAKH1uKjCgLAkIr5BALfmYj5BALNws3TBgKy3p7hAVb6TE/A0Hu49JhH/87U1q1++i+8
    __ASYNCPOST true
    ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin.x 35
    ctl00$ContentPlaceHolder1$websiteLogin1$ibLogin.y 26
    这个网站登录的表单,我猜需要你先访问一次这个页,先取得这些内容
      

  10.   

    static void Main(string[] args)
            {
                System.Net.HttpWebRequest request;
                System.Net.HttpWebResponse response;
                System.IO.Stream stream;
                System.IO.StreamReader reader;
                byte[] body;
                int i;
                string content;            body = System.Text.Encoding.UTF8.GetBytes("ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=asdf&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=asdf");            request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.clicksaya.com/website/default.aspx");            request.CookieContainer = new System.Net.CookieContainer();            request.Method = "POST";            request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";            request.Referer = "http://www.clicksaya.com/website/default.aspx";            request.ContentLength = body.Length;            using(stream = request.GetRequestStream())
                {
                    stream.Write(body, 0, body.Length);
                    stream.Flush();
                }            response = null;            try
                {
                    response = (System.Net.HttpWebResponse)request.GetResponse();
                    for (i = 0; i < response.Headers.Count; ++i)
                    {
                        System.Console.WriteLine(string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i)));
                    }
                    stream = response.GetResponseStream();
                    reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);
                    content = reader.ReadToEnd();
                    reader.Close();
                    System.Console.WriteLine(content);
                }
                finally
                {
                    if(null != response)
                        response.Close();
                }            System.Console.ReadLine();
            }
      

  11.   

    麻烦高手再帮我看看。。        try
            {
                response = (System.Net.HttpWebResponse)request.GetResponse();
                response.Cookies = request.CookieContainer.GetCookies(new Uri(loginUrl));
                for (i = 0; i < response.Headers.Count; ++i)
                {
                    if (aa == "")
                    {
                        aa = string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i));
                    }
                    else
                    {
                        aa += string.Concat(response.Headers.GetKey(i), ": ", response.Headers.Get(i));
                    }
            }
                stream = response.GetResponseStream();
                reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);
                content = reader.ReadToEnd();
                reader.Close();
                lblget.Text = response.Cookies.Count.ToString();我加了红色的那一段,为什么获取COOKIE还是0呢?
      

  12.   

    把Cookie加到Response里没什么意义的吧?楼主是不是要在请求时添加Cookie?
    那么。。
    request.CookieContainer = new System.Net.CookieContainer();只要把这行代码改成指定的CookieContainer 就可以了
    然后在得到Response后,把响应的Cookie加到前面指定的CookieContainer 里就可以了
      

  13.   

    我加这行也不行
    response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
      

  14.   

    在整个过程中,request.CookieContainer是不会发生变化的,有的只会在response的Cookies里面体现出来,但除了指定HttpOnly的Cookie,要获取这个Cookie就从response.Headers里面找出set-cookie头的值
      

  15.   

    你是不是要获得相应的Cookie?
      

  16.   

    要Cookie,用Response.Cookies取就可以了上面代码,你看一下输出的头,就知道是怎么回事了
      

  17.   

            CookieContainer cc= new System.Net.CookieContainer();        request.CookieContainer = cc;最后response = (System.Net.HttpWebResponse)request.GetResponse(); 之后
    cc.Add(response.Cookies);就可以了是吗?
      

  18.   

    response = (System.Net.HttpWebResponse)request.GetResponse();
                cc.Add(response.Cookies); 
    之后request.Cookies.Count 数量还是0
      

  19.   

    CC和COOKIE不是同一个类型,怎么加呢
      

  20.   

    不用再去判断request.cookies了我刚才看了,这个网站只有一个Cookie,而且是HttpOnly的,你要取这个Cookie只有从Response.Headers里取了
      

  21.   

    string cookie = response.Headers["Set-Cookie"];这样么?是空的
      

  22.   


    System.Net.HttpWebRequest request;
                System.Net.HttpWebResponse response;
                System.IO.Stream stream;
                byte[] body;            System.Net.CookieContainer cookies;            cookies = new System.Net.CookieContainer();            body = System.Text.Encoding.UTF8.GetBytes("ctl00$ContentPlaceHolder1$websiteLogin1$tbUsername=asdf&ctl00$ContentPlaceHolder1$websiteLogin1$tbPassword=asdf");            request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.clicksaya.com/website/default.aspx");            request.CookieContainer = cookies;            request.Method = "POST";            request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";            request.Referer = "http://www.clicksaya.com/website/default.aspx";            request.ContentLength = body.Length;            using(stream = request.GetRequestStream())
                {
                    stream.Write(body, 0, body.Length);
                    stream.Flush();
                }            response = null;            try
                {
                    response = (System.Net.HttpWebResponse)request.GetResponse();                cookies.Add(response.Cookies);
                }
                finally
                {
                    if(null != response)
                        response.Close();
                }            foreach (System.Net.Cookie c in cookies.GetCookies(new Uri("http://www.clicksaya.com/website/default.aspx")))
                {
                    System.Console.WriteLine(string.Concat(c.Name, ": ", c.Value));
                }            System.Console.ReadLine();
      

  23.   

    看下,我执行是可以看到的,顺便纠正下,Cookie就算是HttpOnly也是可以取到的