Question

Im requesting on a web server with Basic Authent and the server is supposed to return a cookie.It does when i use a web brower i can check it in FiddlerProxy... When i debug my code the response.cookie remains null. Here is my code.Thanks for your help

  public void ConnexionNT(string password,string user)

    {
        CookieContainer _cookiecontainer=new CookieContainer();
        try
        {

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL_CONNEXION);

            request.Method = "GET";

            request.Credentials = new NetworkCredential(user, password, domain);

            request.CookieContainer = _cookiecontainer;

            request.BeginGetResponse(new AsyncCallback(GetResponse), request);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }
    private void GetResponse(IAsyncResult MyresponseAsync)
    {
        HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);


        if (response.Cookies!=null) //REMAINS NULL
        {    //SAVE COOKIE}
     }

EDIT

If i move the Cookiecontainer decalrtion at the class level the cookie property of httpwebresponse is not null anymore...

EDIT2

Is this code correct to receive cookie from the server ?

 public void ConnexionNT(string password,string user)

    {

        try
        {

            HttpWebRequest request=     (HttpWebRequest)HttpWebRequest.Create(URL_CONNEXION);

            request.Method = "GET";

            request.Credentials = new NetworkCredential(user, password, domain);

            request.CookieContainer = _cookiecontainer;

            request.BeginGetResponse(new AsyncCallback(GetResponse),request);


        }

        catch(HttpRequestException)
        {
            MessageBox.Show("Un problème de connexion avec  le serveur a eu lieu.", "Echec Authentification", MessageBoxButton.OK);
        }
        catch (Exception )
        {
            MessageBox.Show("Une erreur a eu lieu","Echec Authentification", MessageBoxButton.OK);
        }

    }



    private void GetResponse(IAsyncResult MyresponseAsync)
    {

            HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;

            if (request != null)
            {
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);


 //Not null but EMPTY WHY?        if (response.Cookies != null)
                    {
                        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
                        {
                            using (IsolatedStorageFileStream isfs = isf.OpenFile("CookiesFile", FileMode.Create, FileAccess.Write))
                            {
                                using (StreamWriter sw = new StreamWriter(isfs))
                                {
                                    foreach (Cookie cookieValue in response.Cookies)
                                    {
                                        sw.WriteLine("Cookie: " + cookieValue.ToString());

                                    }
                                    sw.Close();
                                }

                            }
                            //declenche l'event pour lancer la navigation sur la vue "codepin"
                            if (event_GetCookie != null && response.Cookies.Count>0)
                                event_GetCookie.Invoke();

                        }

                    }

                }
Was it helpful?

Solution

From MSDN:

If the CookieContainer property of the associated HttpWebRequest is null, the Cookies property will also be null. Any cookie information sent by the server will be available in the Headers property, however.

you need to create a CookieContainer in the request.

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
        request.CookieContainer = new CookieContainer();

        HttpWebResponse response = (HttpWebResponse) request.GetResponse();



        // Print the properties of each cookie. 
        foreach (Cookie cook in response.Cookies)
        {
            Console.WriteLine("Cookie:");
            Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
        }

OTHER TIPS

Try this. may this will helps you

 public void ConnexionNT(string password,string user)    
        {
            CookieContainer _cookiecontainer=new CookieContainer();
            try
            {   
                CookieContainer container = new CookieContainer();
                container.Add(new Uri("http://yoursite"), new Cookie("name", "value"));
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://yoursite");
                request.CookieContainer = container;
                request.Method = "GET";
                request.Credentials = new NetworkCredential(user, password, domain);
                request.BeginGetResponse(new AsyncCallback(GetResponse), request);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
        private void GetResponse(IAsyncResult MyresponseAsync)
        {
            HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);    

            if (response.Cookies!=null) //REMAINS NULL
            {    //SAVE COOKIE}
         }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top