使用HttpClient连接到9gag

时间:2012-11-12 01:18:20

标签: c# .net httpclient

我想为9gag做一个Windows应用商店应用。我使用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”。

那么,有什么想法吗?......我没找到任何东西......

1 个答案:

答案 0 :(得分:2)

这是因为.Net框架中的一个错误,而不是很好地处理cookie。

如果你有安装了firebug插件的chrome或firefox,或者你还有其他方法可以在浏览器中阅读cookie,我会解释。

从9gag获得的cookie列表大部分时间都适用于域名“.9gag.com”,除了1,名为ts1,这一个对登录至关重要,但不适用于域名。“9gag .com“但对于”9gag.com“,由于.Net中的错误,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响应代码。