2016-02-01 36 views
1

我需要一些幫助,以新的Windows.Web.Http.HttpClient類。我現在正在編寫我的第一個WP8.1應用程序,這讓我瘋狂。我登錄到這樣一個網站:Windows.Web.Http.HttpClient:收到Cookie並保存它們

var values = new Dictionary<string, string>(); 
values.Add("login_username", _username); 
values.Add("login_password", _password); 
values.Add("login_lifetime", "36000"); 

var parameters = new HttpFormUrlEncodedContent(values); 
var response = await Forum.Http.PostAsync(new Uri("http://foo.bar.xyz"), parameters); 

var buffer = await response.Content.ReadAsBufferAsync(); 
byte[] byteArray = buffer.ToArray(); 
string content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length); 

if (content.Contains("Wrong password/user name")) 
{ 
     return false; 
} 

return true; 

而這工作得很好。我HttpClient的是一個靜態字段,這樣的:

public static HttpBaseProtocolFilter Filter = new HttpBaseProtocolFilter(); 
public static HttpClient Http = new HttpClient(Filter); 

登錄工作得很好,但它不保存的網站登錄後發送的Cookie我如何保存它們,我可以將它們發送到每個GetAsync()網站?

回答

0

您可以使用HttpClientHandler而不是HttpBaseProtocolFilter。如果您必須使用HttpBaseProtocolFilter,那麼有一個類型爲HttpCookieManager的只讀CookieManager屬性可以幫助您。

下面是一個使用HttpClientHandler一個例子:

public static CookieContainer Cookies = new CookieContainer(); 
public static HttpClientHandler HttpClientHandler = new HttpClientHandler() { CookieContainer = Cookies }; 
public static HttpClient Http = new HttpClient(HttpClientHandler); 

您PostAsync()調用返回後,可以提取餅乾

var uri = new Uri("http://foo.bar.xyz"); 
var response = await Forum.Http.PostAsync(uri, parameters); 
IEnumerable<Cookie> responseCookies = Cookies.GetCookies(uri).Cast<Cookie>(); 
foreach (Cookie cookie in responseCookies) { 
    Console.WriteLine(cookie.Name + ": " + cookie.Value); 
} 

如果你想重新使用來自一個cookie初始請求,您可以創建自己的CookieContainer並從響應cookie中複製cookie。或者 - 你還可以添加一個硬編碼的cookie這樣的:

Cookies.Add(new HttpCookie("Name", "Value") { Domain="http://foo.bar.xyz" }); 
+0

據我所知Windows.Web.Http.HttpClient不使用HttpClientHandler。我錯了嗎? –

+0

我實現了你的解決方案(不得不改用System.Net.Http.HttpClient)。一切仍然正常。但它不會收到或保存任何cookie。我的CookieContainer仍然是空的。這真的讓我發瘋。 –

相關問題