WebRequest是与网站交互的正确C#工具吗?
我正在用C编写一个小工具,它将需要使用POST和json格式向/从网站发送和接收数据。我以前从来没有用C(或者实际上是任何一种语言)做过这样的事情,所以我一直在努力寻找一些有用的信息来使我入门。
我已经在C中的WebRequest类上找到了一些信息(特别是从这里开始),但是在我开始研究它之前,我想知道这是否是适合该工作的工具。
我发现有很多工具可以将数据转换为json格式,但没有太多其他功能,因此,如果我最终陷入困境,那么这里的任何信息都将非常有用。
解决方案
我已经使用WebRequest与网站进行交互。这是正确的"工具"
我无法评论我们问题的JSON方面。
在3.5中有一个内置的jsonserializer。 webrequest是我们所需要的合适课程。
几个例子:
- http://geekswithblogs.net/JuanDoNeblo/archive/2007/10/24/json_in_aspnetajax_part2.aspx
- http://dev.aol.com/blog/markdeveloper/ShareFileWithNETFramework
- http://geekswithblogs.net/JuanDoNeblo/archive/2007/10.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
当涉及到将数据发布到网站时,System.Net.HttpWebRequest(WebRequest的HTTP特定实现)是一个非常不错的解决方案。它支持SSL,异步请求和许多其他功能,并且在MSDN上有详细记录。
有效负载可以是任何内容:JSON格式的数据或者任何其他东西-只要将ContentType属性设置为服务器期望和理解的内容(最有可能的application / json,text / json或者text / x-json),就可以了。
使用来自系统服务的HttpWebRequest时的一个潜在问题:由于它使用IE代理和凭据信息,因此以LOCALSYSTEM用户(或者基本上没有定期交互登录的任何帐户)运行时,默认行为可能会有些奇怪)。将Proxy和Authentication属性设置为Nothing(或者,正如我们Cfolks宁愿称其为null,我猜)应该避免这种情况。
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/zh-CN/library/system.net.httpwebrequest.aspx
要将实例对象转换为json格式的字符串,反之亦然,请尝试Json.NET:
http://json.codeplex.com/
我目前在项目中使用它,它易于学习和使用,并在序列化和自定义类型转换器方面提供了一定的灵活性。它还支持用于查询json输入的LINQ语法。