【问题标题】:Is WebRequest The Right C# Tool For Interacting With Websites?WebRequest 是与网站交互的正确 C# 工具吗?
【发布时间】:2010-09-10 14:45:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net webrequest


    【解决方案1】:

    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

    【讨论】:

    • 后面缺少分号:string postData = "var=value1&var2=value2"
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          How to post json object in web service

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

          Problems sending and receiving JSON between ASP.net web service and ASP.Net web client

          还有一个相关的问题:

          json call with C#

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

              【讨论】:

              • 每个链接后两个空格插入换行符。
              猜你喜欢
              • 1970-01-01
              • 2015-06-09
              • 2018-07-10
              • 2010-09-22
              • 1970-01-01
              • 2016-04-05
              • 1970-01-01
              • 1970-01-01
              • 2012-11-08
              相关资源
              最近更新 更多