我正在用 C# 编写一个小工具,它需要使用 POST 和 json 格式向网站发送和接收数据。我以前从未在 C#(或任何语言)中做过类似的事情,所以我正在努力寻找一些有用的信息来帮助我开始。

我找到了一些关于 C# 中的 WebRequest 类的信息(特别是来自 这里)但在我开始深入研究之前,我想知道这是否是适合这项工作的工具。

我发现了很多可以将数据转换为 json 格式的工具,但没有太多其他工具,所以任何信息都会非常有用,以防我最终陷入死胡同。

有帮助吗?

解决方案

WebRequest,更具体地说,HttpWebRequest 类是您想要实现的目标的一个很好的起点。要创建请求,您将使用 WebRequest.Create 并将创建的请求转换为 HttpWebRequest 以实际使用它。然后,您将创建发布数据并将其发送到流,如下所示:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

同样,您可以使用 GetResponse 方法读回响应,该方法将允许您读取生成的响应流并执行您需要执行的任何其他操作。您可以在以下位置找到有关该课程的更多信息:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

其他提示

网络客户端 有时比 网络请求. 。您可能想看一下。

对于 JSON 反序列化,您需要查看 JavaScript序列化器 班级。

网络客户端示例:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

标记为 wiki,以防有人想要更新代码

当涉及到将数据发布到网站时, 系统.Net.HttpWebRequest (WebRequest 的 HTTP 特定实现)是一个非常不错的解决方案。它支持 SSL、异步请求和许多其他功能,并且在 MSDN 上有详细记录。

有效负载可以是任何内容:JSON 格式或其他格式的数据 - 只要将 ContentType 属性设置为服务器期望和理解的内容(最有可能是 application/json、text/json 或 text/x-json),一切都会好起来的。

从系统服务使用 HttpWebRequest 时存在一个潜在问题:由于它使用 IE 代理和凭据信息,因此当以 LOCALSYSTEM 用户(或基本上任何不定期交互登录的帐户)运行时,默认行为可能有点奇怪。将代理和身份验证属性设置为 Nothing (或者,正如你们 C# 人更喜欢称呼它的那样, null, ,我猜)应该避免这种情况。

我使用 WebRequest 与网站交互。这是正确的“工具”

我无法评论您问题的 JSON 方面。

当前评分最高的答案很有帮助,但它不发送或接收 JSON。

以下是使用 JSON 进行发送和接收的示例:

如何在Web服务中发布json对象

这是对我解决这个问题最有帮助的 StackOverflow 问题:

在 ASP.net Web 服务和 ASP.Net Web 客户端之间发送和接收 JSON 时出现问题

这是另一个相关问题:

使用 C# 进行 json 调用

要将实例对象转换为 json 格式的字符串,反之亦然,请尝试 Json.NET:http://json.codeplex.com/

我目前正在一个项目中使用它,它很容易学习和使用,并且在序列化和自定义类型转换器方面提供了一定的灵活性。它还支持用于查询 json 输入的 LINQ 语法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top