3

我可以使用 HttpClinet 类获取网页,如下所示:

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(@"http://59.185.101.2:10080/jsp/Login.jsp");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

该页面将呈现两个文本框,即用户名和密码。它还会渲染许多隐藏变量。

我想将此呈现的 Html 发布到所需的地址,但使用我自己的用户名和密码值。(保留其余隐藏变量)

我该怎么做呢 ?


PS:这是一个控制台应用程序 POC

4

1 回答 1

4

您可以使用以下PostAsync方法:

using (var client = new HttpClient())
{
    var content = new FormUrlEncodedContent(new[]
    { 
        new KeyValuePair<string, string>("username", "john"),
        new KeyValuePair<string, string>("password", "secret"),
    });
    content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

    var response = await client.PostAsync(
        "http://59.185.101.2:10080/jsp/Login.jsp", 
        content
    );
    response.EnsureSuccessStatusCode();
    var responseBody = await response.Content.ReadAsStringAsync();
}

您必须在FormUrlEncodedContent内容实例中提供服务器端脚本所需的所有必要输入参数。

就隐藏变量而言,您必须使用 HTML Agility Pack 等 HTML 解析器解析从第一次调用中检索到的 HTML,并将它们包含在 POST 请求的集合中。

于 2013-07-16T09:08:51.757 回答