.net 3.5 下 2个HttpWebResponse 之间 公用一个 CookieContainer 为什么cookie传递不过去啊。登录的时候已经获取到cookie了,但是访问第二个页面的时候cookie没有传递过去。大家忙帮看一下 好吗?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO.Compression;
using System.IO;
namespace ScanFarm
{
    public class TrMain
    {
        public CookieContainer myCookie = null;
        public WebHeaderCollection myHeader = null;
        public CookieCollection myCookieA = null;
        public TrMain()
        {
            myCookie = new CookieContainer();
        }
        public string OpenWelcomePage()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://s9.travian.cn/");
            SetHttpWebRequest(request, "");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            myHeader = response.Headers;
            myCookieA = response.Cookies;
            GZipStream receiveStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            string ret = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            return ret;
        }
        public string OpenLoginPage(string username, string password, string login_id)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://s9.travian.cn/dorf1.php");
            SetHttpWebRequest(request, "http://s9.travian.cn/Login.php");
            request.Method = "POST";
            string postData = string.Format("w=1280%3A800&login={0}&ea49f78={1}&e400d23={2}&e15039c=&s1.x=55&s1.y=8&s1=login&autologin=ja",
                login_id, Uri.EscapeDataString(username), Uri.EscapeDataString(password));
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] byte1 = encoding.GetBytes(postData);
            request.C;
            request.ContentLength = byte1.Length;
            Stream newStream = request.GetRequestStream();
            newStream.Write(byte1, 0, byte1.Length);
            newStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //myCookie.Add()
            myHeader = response.Headers;
            myCookieA = response.Cookies;
            GZipStream receiveStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            string ret = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            return ret;
        }
        public string OpenMapPage(int x, int y)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://s9.travian.cn/dorf2.php");
            SetHttpWebRequest(request, "http://s9.travian.cn/dorf1.php");
            request.Method = "GET";
            //string postData = Uri.EscapeUriString(
            //    string.Format("xp={0}&yp={1}&s1.x=2&s1.y=13&s1=ok",x,y));
            //ASCIIEncoding encoding = new ASCIIEncoding();
            //byte[] byte1 = encoding.GetBytes(postData);
            //request.C;
            //request.ContentLength = byte1.Length;
            //Stream newStream = request.GetRequestStream();
            //newStream.Write(byte1, 0, byte1.Length);
            //newStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            myHeader = response.Headers;
            myCookieA = response.Cookies;
            GZipStream receiveStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
            string ret = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            return ret;
        }
        private void SetHttpWebRequest(HttpWebRequest request, string referer)
        {            
            request.CookieContainer = myCookie;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
            request.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
            request.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-cn,zh;q=0.5");
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
            request.Headers.Add(HttpRequestHeader.AcceptCharset, "gb2312,utf-8;q=0.7,*;q=0.7");
            request.Headers.Add(HttpRequestHeader.KeepAlive, "300");          
            request.Referer = referer;
            request.KeepAlive = true;
            request.Proxy = null;
        }
    }

解决方案 »

  1.   

    先BS下你的代码没注释,看得我好累
    myHeader = response.Headers; 
    后面加
    myCookie  =  response.GetCookies();
    看看行不?
    代码不能那么写啊,以后自己都看不懂的
      

  2.   

    不行啊  不是那个问题  我现在找到毛病了
    是这个页面
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://s9.travian.cn/dorf1.php"); 
    打开后返回的 cookie 然后 cookie是和http://s9.travian.cn/dorf1.php绑定了 只有再次访问这个地址的时候cookie才带上
    访问其他的 就不行寒一个 为什么啊http://s9.travian.cn/dorf1.php 里边 已经包含那个cookie不过 在提交别的页面的时候不带上去 :(
      

  3.   

    public CookieContainer myCookie = null; 。为什么不使用static?