2015-11-05 87 views
0

在大家都告訴我增加超時值之前,我不想增加它,因爲沒有意義,100秒不夠長。所有其他獲得和發佈後的響應花費更少的時間,而不會拋出超時/任務取消異常。HTTPClient POST掛起/超時異常

我試圖模仿下面,我粉飾出來的用戶名和密碼... enter image description here

下面是代碼

var baseAddress = new Uri("http://www.foodservice.com/home/fs_login.cfm?logmode=Home"); 
    var cookieContainer = new CookieContainer(); 
    using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) 
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) 
    { 
     var trypage = await client.GetAsync("http://www.foodservice.com/home/fs_login.cfm?logmode=Home"); 
     trypage.EnsureSuccessStatusCode(); 
Console.WriteLine("something"); 
     var content = new FormUrlEncodedContent(new[] 
     { 
      new KeyValuePair<string, string>("user_name", "someuser"), 
      new KeyValuePair<string, string>("password", "somepass"), 
      new KeyValuePair<string, string>("logmode", "Home") 
     }); 
     var result = await client.PostAsync("http://www.foodservice.com/home/fs_login_check.cfm", content); 
Console.WriteLine("somethingelse"); 
     result.EnsureSuccessStatusCode(); 

這雙手上。東西印刷品,somethingelse不

變種結果=等待client.PostAsync( 「http://www.foodservice.com/home/fs_login_check.cfm」,內容);

我看不出有任何理由爲什麼要掛在這裏失敗...

摘要:爲什麼不是我的帖子堅持下去嗎?我是使用錯誤的地址還是什麼?

+0

我假定該方法的工作原理,並沒有超時,如果你使用一個普通的web瀏覽器來瀏覽有問題的網頁? 很難說出爲什麼它不起作用,或許這個網站有額外的檢查來驗證登錄是由人發佈的,而不是通過例如暴力破解密碼。或者您的請求中缺少一些必需的Cookie? – Culme

+0

@Culme確定我傾倒了這些cookie,並且我錯過了一些應該在那裏的信息,當我加載頁面時...是否有一種方法可以使httpclient等待所有cookie? –

+0

@Culme我檢查了大部分的javascript,我找不到來自.foodservice.com的cookies來自哪裏,我只有www.foodservice.com cookies –

回答

0

更多信息,出於某種原因,這個過程可能不會是多線程的。

從任務切換到阻塞單線程它工作得很好......

0

試試這個

await client.GetAsync("http://www.foodservice.com/home/fs_login.cfm?logmode=Home").ConfigureAwait(false); 

await client.PostAsync("http://www.foodservice.com/home/fs_login_check.cfm", content).ConfigureAwait(false); 

你可以得到Httpclient Async call

+0

已經試過了。 –

+0

我面臨同樣的問題,http客戶端永遠不會返回,但'.ConfigureAwait(false);'爲我工作。 –