我想为9gag做一个windows store应用。我使用HttpClient
我想要连接用户,这样他就可以喜欢/不喜欢。因此,我使用数据对9gag/login执行POST请求,但它失败了。一位同事在JavaScript中做了类似的事情,它起作用了。
private async void connect()
{
try
{
string result;
HttpResponseMessage response = await httpClient.GetAsync(url + "login/");
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
string key = takeKey(result);
var values = new Dictionary<string, string> { { "csrftoken", key }, { "username", username }, { "password", password } };
//Header of the http request
HttpContent header = new FormUrlEncodedContent(values);
response = await httpClient.PostAsync(url + "login/", header);
response.EnsureSuccessStatusCode();
result = await response.Content.ReadAsStringAsync();
string test = response.IsSuccessStatusCode.ToString();
}
catch (HttpRequestException hre)
{
string test = "";
}
catch (Exception ex)
{
// For debugging
string test = "";
}
}我尝试了不同的方法来放置HTTPContent...是其中之一..。url的值是"http://9gag.com/",所以当我把断点放在最后的时候。当我看到结果并在浏览器上尝试时,我得到了错误:“请再试一次”。如果密码不正确,我会得到错误:“错误的用户名/密码组合blablabla”。
所以,有什么想法吗?....我什么也没找到...
发布于 2012-12-19 18:16:14
这是因为.Net框架中的一个错误,没有很好地处理cookies。
如果你安装了chrome,或者安装了firebug插件的firefox,或者你有其他方法可以在浏览器中读取cookie,我会解释的。
从9gag获得的cookie列表大部分时间都是针对域".9gag.com“的,除了1,名为ts1,这对登录至关重要,但不是针对".9gag.com”域,而是针对"9gag.com",因为.Net中的一个bug ts1 cookie没有存储。
这里你有一个小的变通方法,但是我不确定这是否完全稳定,
Cookie cookie = new Cookie();
cookie.Domain = "9gag.com";
cookie.Name = "ts1";
cookie.Value = "VALUEOFTHISCOOKIE";
this._Cookies.Add(new Uri("http://9gag.com"), cookie);在上面的代码中,您必须将"VALUEOFTHISCOOKIE“替换为浏览器中的cookie的值(在我的示例中为: fb221d618c89577cf59c7ce5fd300c5b43e4259f)。
这对我很有效,如果登录是正确的,我会得到一个302响应码。
https://stackoverflow.com/questions/13337254
复制相似问题