2013-12-10 1 views
0

Я использую сторонние службы, которые могут регистрировать пользователя, а затем запоминают его, пока он не выйдет из системы. Я не уверен, как они это делают. Вы отправляете запрос GET с именем пользователя и паролем, а затем, если вы получите ответ «ОК», вы вошли в систему. Вы можете проверить, что вы вошли в систему другим методом GET. Когда я попробовал его в браузере, все в порядке. Я не знаю, что они использовали для различения других запросов.WebRequest - как он изменяется от других запросов (например, браузер и т. Д.)

Я делаю приложение Windows Phone, которое использует эти службы, но когда я использую WebRequest (HttpWebRequest), я получаю правильный ответ для регистрации, но когда я попробовал второй запрос для проверки входа пользователя в систему, тогда я получаю ответ, что он не является , Я беру методы моих помощников из проекта WP, и я добавил в проект WPF и попробовал его, и я получаю те же результаты. Поэтому я предполагаю, что проблема связана с настройками WebRequests (возможно, в заголовке). Может ли кто-нибудь сказать мне, в каком WebRequest отличается от запросов браузера? Или вы могли бы сказать мне, какой параметр я должен добавить в заголовок, чтобы заставить это работать? Благодаря

Это мои методы для получения данных из запросов:

public static async Task<string> SendGetRequestGetResponse(string url) 
    { 
     string result; 
     var request = (HttpWebRequest)WebRequest.Create(url); 
     using (var httpWebResponse = await HttpExtensions.GetResponseAsync(request)) 
     { 
      using (var reader = new StreamReader(httpWebResponse.GetResponseStream())) 
      { 
       result = await reader.ReadToEndAsync(); 
      } 
     } 

     return result; 
    } 

    public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request) 
    { 
     var taskComplete = new TaskCompletionSource<HttpWebResponse>(); 
     request.BeginGetResponse(asyncResponse => 
     { 
      try 
      { 
       var responseRequest = (HttpWebRequest)asyncResponse.AsyncState; 
       var someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse); 
       taskComplete.TrySetResult(someResponse); 
      } 
      catch (WebException webExc) 
      { 
       var failedResponse = (HttpWebResponse)webExc.Response; 
       taskComplete.TrySetResult(failedResponse); 
      } 
     }, request); 
     return taskComplete.Task; 
    } 

ответ

1

Они много способов или методов написать веб-службу и для обработки сеансов (авторизован/логает состояние). Следовательно, его нелегко ответить, не зная, как работает ваш сервис.

Для примера, Session managing techniques.

Браузеры обрабатывают сеансы по-другому. В приложениях нам придется обрабатывать их вручную.

Прежде всего, открыв службу в браузере (ex chrome), откройте инструменты разработчика (ярлык - F12), перейдите на раздел Network и обратите внимание на каждый запрос и ответ и какие заголовки установлены. Это дает вам некоторую идею. Затем вернитесь сюда и уточните свой вопрос более подробно.

Также вы можете обратиться к этому SO question on session management

+0

Спасибо. Проблема заключалась в том, что я не сохранил файлы cookie, а затем я не отправляю их по новому запросу. –