关于.net:WebRequest是用于与网站进行交互的正确C#工具吗?

关于.net:WebRequest是用于与网站进行交互的正确C#工具吗?

Is WebRequest The Right C# Tool For Interacting With Websites?

我正在用C#语言编写一个小工具,该工具需要使用POST和json格式向/从网站发送和接收数据。 我以前从未用C#(或实际上是任何一种语言)做过类似的事情,所以我一直在努力寻找一些有用的信息来使我入门。

我已经在C#中的WebRequest类上找到了一些信息(特别是从这里开始),但是在我开始研究它之前,我想知道这是否是正确的工具。

我发现有很多工具可以将数据转换为json格式,但是没有太多其他功能,因此,如果我最终陷入困境,那么这里的任何信息都将非常有用。


WebRequest(尤其是HttpWebRequest类)是您要实现的目标的良好起点。要创建请求,您将使用WebRequest.Create并将创建的请求转换为HttpWebRequest以实际使用它。然后,您将创建自己的帖子数据,并将其发送到流中,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
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


WebClient有时比WebRequest更易于使用。您可能想看看它。

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

WebClient示例:

1
2
3
4
5
6
7
8
9
10
11
12
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)应该避免这种情况。


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

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

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

这是最能帮助我解决此问题的StackOverflow问题:

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

这是另一个相关的问题:

用C#进行json调用


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

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


我已经使用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

推荐阅读