Salve,
sto provando a scrivere un applicazione in C# leggermente più complicato per me e ho riscontrato la mia prima difficolta.
Dovrei scrivere una classe per la lettura delle pagine web, con l'autenticazione.
Io ho scritto questo:
Interfaccia
codice:
using System;
using System.IO;
using System.Net;

namespace MyApp.Proxy
{
	public interface IProxy
	{
		string Referer { get; set; }
		string UserAgent { get; set; }
		CookieContainer Cookies { get; set; }

		StreamReader RequestData(string url);
		StreamReader RequestData(string url, RequestMethod method);
		StreamReader RequestData(string url, RequestMethod method, HttpPostData postData);
	}
}
Classe 1
codice:
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using MyApp.Utility;

namespace MyApp.Proxy
{
	public enum RequestMethod
	{
		Get = 0,
		Post = 1
	}

	public abstract class Proxy : IProxy
	{
		protected string m_referer;
		protected string m_userAgent;
		protected CookieContainer m_cookies;

		public string Referer
		{
			get { return m_referer; }
			set { m_referer = value; }
		}

		public string UserAgent
		{
			get { return m_userAgent; }
			set { m_userAgent = value; }
		}

		public CookieContainer Cookies
		{
			get { return m_cookies; }
			set { m_cookies = value; }
		}

		public Proxy()
		{
			m_referer = String.Empty;
			m_userAgent = "Mozilla/5.0 (X11; U; Linux x86_64; it-it) AppleWebKit/534.26+ (KHTML, like Gecko) Ubuntu/11.04 Epiphany/2.30.6";
			m_cookies = new CookieContainer();
		}

		public virtual StreamReader RequestData(string url)
		{
			return RequestData(url, RequestMethod.Get);
		}

		public virtual StreamReader RequestData(string url, RequestMethod method)
		{
			return RequestData(url, method, null);
		}

		public virtual StreamReader RequestData(string url, RequestMethod method, HttpPostData postData)
		{
			return null;
		}
	}

	public sealed class HttpPostData
	{
		private string[] Entries;
		public string Compiled;
		public int Length;

		public HttpPostData(int size)
		{
			Entries = new string[size];
			Compiled = "";
			Length = 0;
		}

		public void AddEncoded(int position, string header, string value)
		{
			Entries[position] = header + "=" + HttpUtility.UrlEncode(value);
		}

		public void Add(int position, string header, string value)
		{
			Entries[position] = header + "=" + value;
		}

		public string Compile()
		{
			Compiled = String.Join("&", Entries);
			Length = Compiled.Length;
			return Compiled;
		}

		public override string ToString()
		{
			return Compile();
		}

	}
}
Classe 2
codice:
using System;
using System.IO;
using System.Net;
using System.Text;
using MyApp.Utility;

namespace MyApp.Proxy
{
	public class MyPC : Proxy
	{
		private string cookieHeader;

		public MyPC() : base()
		{
			
		}

		public override StreamReader RequestData(string url)
		{
			return RequestData(url, RequestMethod.Get);
		}

		public override StreamReader RequestData(string url, RequestMethod method)
		{
			return RequestData(url, method, null);
		}

		public override StreamReader RequestData(string url, RequestMethod method, HttpPostData postData)
		{
			try
			{
				HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
				if (method == RequestMethod.Post && postData != null)
				{
					postData.ToString();
					request.Method = "POST";
					request.ContentType = "application/x-www-form-urlencoded";
					request.ContentLength = postData.Length;
					using (Stream writeStream = request.GetRequestStream())
					{
						UTF8Encoding encoding = new UTF8Encoding();
						byte[] bytes = encoding.GetBytes(postData.Compiled);
						writeStream.Write(bytes, 0, bytes.Length);
					}
				}
				else
				{
					request.Method = "GET";
				}

				if (Referer != String.Empty)
					request.Referer = m_referer;

				if (UserAgent != String.Empty)
					request.UserAgent = m_userAgent;

				request.Timeout = 60000;

				request.CookieContainer = m_cookies;

				HttpWebResponse response = (HttpWebResponse)request.GetResponse();
				Stream responseStream = response.GetResponseStream();
				StreamReader streamRead = new StreamReader(responseStream, Encoding.UTF8);
				
				m_referer = url;

				return streamRead;
			}
			catch (Exception e)
			{
				Log.Error(e.ToString());
				return null;
			}
		}
	}
}
Dopo inizializzo in questo modo la classe:
codice:
MyPC m_proxy = new MyPC();
e attraverso POST DATA faccio il login al sito interessato:
codice:
HttpPostData postData = new HttpPostData(6);
...
StreamReader reader = m_proxy.RequestData(m_server.Address + "login.php", RequestMethod.Post, postData)
e fino qui ci siamo, il login avviene corettamente.
Ma al richiamo di una seconda pagina che si vede solo se si è autenticati, non mi visualizza, ritorna la pagina con avviso di autentificarsi. È come se la classe non memorizza corettamente i cookies neccessari per mantenere i dati dopo l'autenticazione.

Ho già cercato su google, ma non ho trovato nulla che mi aiuti a capire dove faccio lo sbaglio.
Potete aiutarmi per favore.

Grazie.