发布到表单会导致AggregateException

时间:2018-03-05 08:39:30

标签: c# http-post dotnet-httpclient

所以我试图使用HttpClient(和CloudFlareUtilities)发布一个表单,并按如下所示进行初始化:

var handler = new ClearanceHandler {
    MaxRetries = 4,
};
var client = new HttpClient(handler);
client.DefaultRequestHeaders.Connection.Clear();
client.DefaultRequestHeaders.ConnectionClose = false;
client.DefaultRequestHeaders.Add("User-Agent",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " +
    "(KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36");
client.Timeout = TimeSpan.FromSeconds(30);

创建客户端是成功的,没有明显的问题发生。但是,我创建了一个POST请求,如下所示:

var content = new FormUrlEncodedContent(new[] {
    new KeyValuePair<string, string>("login", "username"),
    new KeyValuePair<string, string>("password", "pw"),
    new KeyValuePair<string, string>("cookie_check", "1"),
    new KeyValuePair<string, string>("redirect", "myRedirect"),
    new KeyValuePair<string, string>("register", "0"),
    new KeyValuePair<string, string>("remember", "1")
});

发布数据:

var post = client.PostAsync("https://www.mc-market.org/login/login", content).Result.Content.ReadAsStreamAsync().Result;

上述行抛出错误:

  

内部例外1:   HttpRequestException:将内容复制到流时出错。

     

内部例外2:   IOException:读取操作失败,请参阅内部异常。

     

内部例外3:   WinHttpException:操作已被取消

我可以从中解释的是,出了点问题,有些东西取消了任务,但我自己从未取消过。

将错误行限制为

var post = client.PostAsync("https://www.mc-market.org/login/login", content);

给出了同样的错误。

我是否有可能错误地创建了内容?我可能已经离开的一些迹象表示赞赏。

1 个答案:

答案 0 :(得分:0)

为简单起见,我决定不使用HttpClient

相反,我选择使用PhantomJS&amp; Selenium,无论如何都本身支持Javascript in-browser(我决定启用Cloudflare旁路)。

我接下来使用其SendKeys()方法在网站https://www.mc-market.org/login/(而不是https://www.mc-market.org/login/login)中输入登录字段,然后按下{{1}的按钮}。示例如下所示;

Click()

结果更简单,它就像一个魅力。