如何使用HttpClient进行发布?

3
我可以使用HttpClient类获取网页,具体代码如下:
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。

1
给那位点了踩的人,能否留下任何评论? - Bilal Fazlani
不清楚为什么你的问题被踩了。在我看来,它看起来是一个有效的问题。 - Darin Dimitrov
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,使用类似于HTML Agility Pack的HTML解析器,并将其包含在POST请求的集合中。


这个有更好的方法吗?顺便问一下。 - Bilal Fazlani
对于这个目的来说,RestSharp比Html Agility Pack更好吗? - Bilal Fazlani
1
RestSharpHTML Agility Pack是两个完全不同的库,分别执行两个完全不同的任务。因此,您不能询问是否可以使用其中一个来代替另一个。 RestSharp只是一个HTTP客户端,您可以使用它来代替.NET中内置的HttpClient类。另一方面,HTML Agility Pack是一个HTML解析器,允许您解析和查询HTML文档(您之前使用HTTP客户端如RestSharpHttpClient下载)。 - Darin Dimitrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接