我正在使用C#编写一个小工具,需要使用POST和JSON格式向网站发送和接收数据。我以前从未在C#(或任何语言)中做过这样的事情,因此我很难找到一些有用的信息来帮助我入门。
我在C#的WebRequest类中找到了一些信息(特别是从这里),但在开始深入研究之前,我想知道这是否是适合这项工作的正确工具。
我找到了许多将数据转换为JSON格式的工具,但没有其他有用的信息,因此在遇到死胡同时,任何信息都将非常有帮助。
我正在使用C#编写一个小工具,需要使用POST和JSON格式向网站发送和接收数据。我以前从未在C#(或任何语言)中做过这样的事情,因此我很难找到一些有用的信息来帮助我入门。
我在C#的WebRequest类中找到了一些信息(特别是从这里),但在开始深入研究之前,我想知道这是否是适合这项工作的正确工具。
我找到了许多将数据转换为JSON格式的工具,但没有其他有用的信息,因此在遇到死胡同时,任何信息都将非常有帮助。
WebRequest,尤其是HttpWebRequest类,是您想要实现的内容的良好起点。要创建请求,您将使用WebRequest.Create并将创建的请求转换为HttpWebRequest以实际使用它。然后,您将创建您的post数据并将其发送到流中,例如:
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();
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx
WebClient相比WebRequest有时更易于使用。你可以看一下它。
对于JSON反序列化,您需要查看JavaScriptSerializer类。
WebClient示例:
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,以便有人想更新代码
当涉及到向网站POST数据时,System.Net.HttpWebRequest(WebRequest的HTTP特定实现)是一个完全不错的解决方案。它支持SSL、异步请求和一堆其他好东西,并且在MSDN上有很好的文档。
有效载荷可以是任何东西:JSON格式的数据或其他格式——只要将ContentType属性设置为服务器期望和理解的内容类型(最可能是application/json、text/json或text/x-json),一切都会很好。
使用系统服务中的HttpWebRequest时可能存在一个潜在问题:由于它使用IE代理和凭据信息,当以LOCALSYSTEM用户(或基本上任何不经常交互登录的帐户)运行时,默认行为可能有点奇怪。将Proxy和Authentication属性设置为Nothing
(或者,正如你们C#人喜欢称呼它的那样,null
)应该可以避免这种情况。
要将实例对象转换为JSON格式的字符串,或者将JSON格式的字符串转换为实例对象,请尝试使用Json.NET: http://json.codeplex.com/
我目前正在使用它进行项目开发,它易于学习和使用,并且在序列化和自定义类型转换器方面提供了一定的灵活性。它还支持使用LINQ语法查询JSON输入。
我已经使用了WebRequest来与网站进行交互。它是正确的工具。
关于你问题中的JSON方面,我无法发表评论。
目前最高评分的答案很有帮助,但它不发送或接收JSON。
这里有一个示例,它使用JSON进行发送和接收:
这是StackOverflow上帮助我解决这个问题的最有用的问题:
在ASP.net Web服务和ASP.Net Web客户端之间发送和接收JSON时出现问题
这是另一个相关的问题:
在3.5版本中,有一个内置的JsonSerializer。WebRequest是你要寻找的正确类。
以下是一些示例: