WebRequest是否是与网站交互的正确C#工具?

时间:2008-09-18 09:46:30

标签: c# .net webrequest

我正在用C#编写一个小工具,需要使用POST和json格式向网站发送数据和从网站接收数据。我以前从未在C#(或任何语言)中做过这样的事情,所以我很难找到一些有用的信息让我开始。

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

我发现有很多工具可以将数据转换为json格式,但其他方面并不多,所以任何信息在这里都会非常有用,以防我最终陷入死胡同。

7 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:19)

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

目前评分最高的答案很有帮助,但它不会发送或接收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 :(得分:-1)