35

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

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

我找到了很多将数据转换为 json 格式的工具,但没有太多其他工具,所以任何信息在这里都会很有帮助,以防我最终陷入死胡同。

4

7 回答 7

27

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

于 2008-09-18T09:58:32.547 回答
19

WebClient有时比WebRequest更容易使用。你可能想看看它。

对于 JSON 反序列化,您需要查看JavaScriptSerializer类。

网络客户端示例:

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 以防有人想要更新代码

于 2008-09-18T09:56:57.107 回答
1

在将数据发布到网站时,System.Net.HttpWebRequest(WebRequest 的 HTTP 特定实现)是一个完美的解决方案。它支持 SSL、异步请求和许多其他好东西,并且在 MSDN 上有详细记录。

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

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

于 2008-09-18T09:58:02.733 回答
0

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

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

于 2008-09-18T09:50:45.637 回答
0

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

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

于 2010-12-06T04:49:08.253 回答
0

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

这是一个使用 JSON 进行发送和接收的示例:

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

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

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

这是另一个相关的问题:

使用 C# 调用 json

于 2012-05-30T18:00:08.623 回答
-1

在 3.5 中有一个内置的 jsonserializer。webrequest 是您正在寻找的正确类。

几个例子:

于 2008-09-18T09:52:00.923 回答