我正在用 C# 编写一个小工具,它需要使用 POST 和 json 格式向/从网站发送和接收数据。我以前从未在 C#(或任何语言)中做过这样的事情,所以我正在努力寻找一些有用的信息来帮助我开始。
我在 C# 中找到了一些关于 WebRequest 类的信息(特别是从这里开始),但在我开始深入研究之前,我想知道这是否是适合这项工作的工具。
我找到了很多将数据转换为 json 格式的工具,但没有太多其他工具,所以任何信息在这里都会很有帮助,以防我最终陷入死胡同。
我正在用 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
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 以防有人想要更新代码
在将数据发布到网站时,System.Net.HttpWebRequest(WebRequest 的 HTTP 特定实现)是一个完美的解决方案。它支持 SSL、异步请求和许多其他好东西,并且在 MSDN 上有详细记录。
有效负载可以是任何东西:JSON 格式的数据或其他格式的数据——只要您将 ContentType 属性设置为服务器期望和理解的内容(很可能是 application/json、text/json 或 text/x-json),所有内容都将是美好的。
从系统服务使用 HttpWebRequest 时的一个潜在问题:由于它使用 IE 代理和凭据信息,因此在以 LOCALSYSTEM 用户(或基本上任何不定期交互登录的帐户)运行时,默认行为可能有点奇怪)。将 Proxy 和 Authentication 属性设置为Nothing
(或者,我猜 C# 的人更喜欢这样称呼它null
)应该避免这种情况。
我使用 WebRequest 与网站交互。这是正确的“工具”
我无法评论您问题的 JSON 方面。
要将实例对象转换为 json 格式的字符串,反之亦然,请尝试 Json.NET:http://json.codeplex.com/
我目前正在将它用于一个项目,它易于学习和使用,并且在序列化和自定义类型转换器方面提供了一些灵活性。它还支持用于查询 json 输入的 LINQ 语法。
当前评分最高的答案很有帮助,但它不会发送或接收 JSON。
这是一个使用 JSON 进行发送和接收的示例:
这是对我解决这个问题最有帮助的 StackOverflow 问题:
在 ASP.net Web 服务和 ASP.Net Web 客户端之间发送和接收 JSON 的问题
这是另一个相关的问题:
在 3.5 中有一个内置的 jsonserializer。webrequest 是您正在寻找的正确类。
几个例子: