【问题标题】:How to post using HttpClient?如何使用 HttpClient 发帖?
【发布时间】:2013-07-16 08:59:36
【问题描述】:

我可以使用 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

【问题讨论】:

  • 投反对票的人,愿意发表评论吗?
  • 尚不清楚您的问题为何被否决。对我来说,这似乎是一个有效的问题。

标签: c# asp.net web-services rest httpclient


【解决方案1】:

您可以使用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 请求的集合中。

【讨论】:

  • 谢谢达林。我会试试看的。
  • 顺便说一句,有没有更好的方法?
  • restsharp 会比 html 敏捷包更好吗?
  • RestSharpHTML Agility Pack 是 2 个完全不同的库,做了 ​​2 个完全不同的事情。所以你不能问你是否可以用一个来代替另一个。 RestSharp 只是一个 HTTP 客户端,您可以使用它来代替在 .NET 中构建的 HttpClient 类。另一方面,HTML Agility Pack 是一个 HTML 解析器,它允许您解析和查询 HTML 文档(您之前使用 HTTP 客户端下载过的文档,例如 RestSharpHttpClient)。
猜你喜欢
  • 2019-10-05
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多