HTTPClient POST挂起/超时异常
在大家都告诉我增加超时值之前,我不想增加它,因为没有意义,100秒不够长。所有其他获得和发布后的响应花费更少的时间,而不会抛出超时/任务取消异常。HTTPClient POST挂起/超时异常
下面是代码
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”,内容);
我看不出有任何理由为什么要挂在这里失败...
摘要:为什么不是我的帖子坚持下去吗?我是使用错误的地址还是什么?
更多信息,出于某种原因,这个过程可能不会是多线程的。
从任务切换到阻塞单线程它工作得很好......
试试这个
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);
已经试过了。 –
我面临同样的问题,http客户端永远不会返回,但'.ConfigureAwait(false);'为我工作。 –
我假定该方法的工作原理,并没有超时,如果你使用一个普通的web浏览器来浏览有问题的网页? 很难说出为什么它不起作用,或许这个网站有额外的检查来验证登录是由人发布的,而不是通过例如暴力破解密码。或者您的请求中缺少一些必需的Cookie? – Culme
@Culme确定我倾倒了这些cookie,并且我错过了一些应该在那里的信息,当我加载页面时...是否有一种方法可以使httpclient等待所有cookie? –
@Culme我检查了大部分的javascript,我找不到来自.foodservice.com的cookies来自哪里,我只有www.foodservice.com cookies –