locked
Windows Phone 7 POST запрос и cookie RRS feed

  • Вопрос

  • Немогу разобраться как правильно выполнять POST запросы в Windows phone 7 приложении. Впринцапе для этого есть несколько способов...Использовать WebClient или HttpWebRequest.
     WebClient прост в управлении, но нет работы с cookie. А HttpWebRequest с его асинхронными методами...вообщем пока я не совсем понимаю как он работает.
     Хочу разобраться, что лучше использовать для авторизации на сервере. Для примера, решил попробоват залогиниться на сайте Вконтакте. Пробовал следующие способы:

     Пробовал через WebClient:

     public class CookieAwareClient : WebClient
            {
                [System.Security.SecuritySafeCritical]
                public CookieAwareClient()
                    : base()
                {
                }
                private CookieContainer m_container = new CookieContainer();
                protected override WebRequest GetWebRequest(Uri address)
                {
                    WebRequest request = base.GetWebRequest(address);
                    if (request is HttpWebRequest)
                    {
                        (request as HttpWebRequest).CookieContainer = m_container;
                    }
                    return request;
                }
            }
     
                CookieAwareClient cookieClient = new CookieAwareClient;
                cookieClient.OpenWriteCompleted+=new OpenWriteCompletedEventHandler(cookieClient_OpenWriteCompleted);
                cookieClient.Headers["User-Agent"] = "Mozilla/4.0 (compatible; ICS)";
                cookieClient.OpenWriteAsync(new Uri("http://login.vk.com"), "POST", "email=myemail@server.com&pass=mypassword");
     
            void  cookieClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
            {
                var responseTest = e.Result.ToString();
            }
    

    Вообщем, если посмотреть через HttpAnalyzer, то в Response Headers будет пусто, следовательно в cookie тоже пусто, а вот в Response Content написано: Request is not completed. waiting ...

     Потом использовал библиотеку RestSharp:

    var client = new RestClient("http://login.vk.com");
     
            var request = new RestRequest("?act=login", Method.POST);
            request.AddParameter("email", "myemail", ParameterType.GetOrPost);
            request.AddParameter("pass", "mypassword", ParameterType.GetOrPost);
            request.AddParameter("vk", "mytoken", ParameterType.GetOrPost);
     
            client.ExecuteAsync(request, (response) =>
            {
                CookieCollection cookie = client.CookieContainer.GetCookies(response.ResponseUri);
                var auth = response.Content.ToString();
            });
    

    И тоже самое, если посмотреть через HttpAnalyzer, то в Response Headers и cookie пусто, и опять же Response Content написано: Request is not completed. waiting ...
     Что я делаю не так? тот же самый код (c RestSharp) пробовал для авторизации в Google Reader и все работает. а с Вконтакте нет...
     Как вообще правильно выполнить такой POST запрос для авторизации на сайте?

    27 ноября 2011 г. 11:52

Ответы

  • > в Windows phone 7 приложении.  [...] решил попробоват залогиниться на сайте Вконтакте.



    см. Vkontakte WP, source code

     

    • Помечено в качестве ответа Abolmasov Dmitry 15 декабря 2011 г. 6:21
    5 декабря 2011 г. 9:29

Все ответы

  • Обработчик cookieClient_OpenWriteCompleted в примере выше вызывается? Может быть сервер не успевает прислать ответ к тому моменту, когда вы на него в HttpAnanyzer смотрите.
    1 декабря 2011 г. 14:45
  • > в Windows phone 7 приложении.  [...] решил попробоват залогиниться на сайте Вконтакте.



    см. Vkontakte WP, source code

     

    • Помечено в качестве ответа Abolmasov Dmitry 15 декабря 2011 г. 6:21
    5 декабря 2011 г. 9:29
  • Вконтакте не такая прозрачная авторизация, как кажется и лучше воспользоваться готовой библиотекой, как предложил Malobukv.

    Пожалуйста, не забывайте отмечать ответы.

    Спасибо.


    Для связи [mail]
    15 декабря 2011 г. 6:24