2015-03-02 40 views
0

我在嘗試編寫一個簡單的瀏覽器遊戲機器人的問題。RestSharp在響應對象上沒有cookie

遊戲可以在這裏找到http://en.gladiatus.gameforge.com/game/

問題是,我登錄後,我需要獲取將用於未來請求的cookie,但RestResponse.Cookies始終爲空。

下面是一個可以解釋我的問題的工作登錄代碼。

public bool DoLogin() { 
    var client = new RestClient("http://s2.en.gladiatus.gameforge.com"); //Server 2 on England. 
    var request = new RestRequest("/game/index.php?mod=start&submod=login", Method.POST); 
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); 
    request.AddParameter("name", "bot_test"); //test account. 
    request.AddParameter("pass", "bot_test_pass"); 

    var response = client.Execute(request); 

    var match = System.Text.RegularExpressions.Regex.Match( 
     response.Content, 
     "href=\"index\\.php\\?mod=news&submod=serverEvents&sh=([^&]*?)\""); 

    var _Successful = match.Success; 

    MessageBox.Show(response.Cookies.Count.ToString()); //Always 0 

    if(!_Successful) //Could not login. 
     return false; 

    var _SecureHash = match.Groups[0].Value; 

    return _Successful; 
} 

我嘗試了一切,我知道(這並不多),但我無法找到我的代碼有什麼問題。

感謝您的閱讀!

+0

嘗試使用網絡流量調試器(例如Fiddler http://www.telerik.com/fiddler)檢查響應:很可能您在響應中沒有收到任何cookie。 – Isantipov 2015-03-02 23:58:35

+0

嗯你說得對。用瀏覽器做同樣的事情我會收到一個cookie。要檢查爲什麼現在。謝謝您的幫助。 – MHC 2015-03-03 00:12:50

+0

你知道了嗎? – 2015-03-17 16:59:54

回答

0

您需要執行任何請求之前實例上的RESTClient實現一個CookieContainer

var client = new RestClient("http://s2.en.gladiatus.gameforge.com"); 
client.CookieContainer = new System.Net.CookieContainer(); 

然後確保在後續請求您重新使用相同的RESTClient實現實例,同樣的Cookie將自動與每個傳遞請求。