我需要新的Windows.Web.Http.HttpClient类的帮助。我现在正在编写我的第一个WP8.1 App,它使我发疯。我正在登录这样的网站:

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()上将它们发送到网站?

最佳答案

您可以使用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()调用返回之后,您可以提取cookie

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" });

关于c# - Windows.Web.Http.HttpClient:接收cookie并将其保存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35135613/

10-12 00:03
查看更多