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

35

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

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

我找到了许多将数据转换为JSON格式的工具,但没有其他有用的信息,因此在遇到死胡同时,任何信息都将非常有帮助。

7个回答

27

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();

同样地,您可以使用GetResponse方法读取响应,这将允许您阅读结果响应流并执行其他需要的操作。您可以在以下网址找到有关该类的更多信息:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx


1
在这里缺少一个分号:string postData = "var=value1&var2=value2" - Martin Marconcini

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


1

当涉及到向网站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)应该可以避免这种情况。


0

要将实例对象转换为JSON格式的字符串,或者将JSON格式的字符串转换为实例对象,请尝试使用Json.NET: http://json.codeplex.com/

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


0

我已经使用了WebRequest来与网站进行交互。它是正确的工具。

关于你问题中的JSON方面,我无法发表评论。


0

-1

1
每个链接后面插入两个空格以换行。 - Eric Schoonover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接