1

我想为 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”。

那么,有什么想法吗?......我什么也没找到......

4

1 回答 1

2

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

如果您有 chrome 或安装了 firebug 插件的 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 响应代码。

于 2012-12-19T10:16:13.550 回答