2012-11-12 83 views
1

我想爲9gag做一個Windows應用商店應用程序。我使用HttpClient用HttpClient連接到9gag

我想連接用戶,所以他將能夠喜歡/不像。所以,我對數據做了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 ....這是其中之一... 網址的價值爲「http:/ /9gag.com/「,所以當我在最後放置一個斷點時。當我看到結果並在瀏覽器上嘗試時,出現錯誤:「請再試一次」。如果密碼不好,我得到錯誤:「錯誤的組合用戶/密碼blablabla」。

因此,任何想法?....我沒有發現任何東西....

+1

異步請求響應。 –

+0

是的,因爲在.Net for Windows商店應用程序中一切都是異步..在我想使用HttpWebRequest之前,因爲沒有異步方法不可用... – Nic007

+2

是的,但您在新線程上請求內容並在啓動後立即線程,讀取尚未被寫入的字符串 –

回答

2

這是因爲在.NET Framework中的一個錯誤,不是HANDELING餅乾很好。

如果您安裝了Chrome或Chrome,並且安裝了Firebug插件,或者您有其他方法來讀取瀏覽器中的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響應代碼。