2015-11-05 71 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);'为我工作。 –