使用System.Net.WebClient发送HTTP POST

时间:2011-11-22 04:44:03

标签: .net vb.net http webclient

是否可以使用System.Net.WebClient发送带有一些表单数据的HTTP POST?

如果没有,是否有其他类似WebClient的库可以进行HTTP POST?我知道我可以使用System.Net.HttpWebRequest,但我正在寻找一些不那么冗长的东西。

希望它看起来像这样:

Using client As New TheHTTPLib
    client.FormData("parm1") = "somevalue"
    result = client.DownloadString(someurl, Method.POST)
End Using

3 个答案:

答案 0 :(得分:61)

基于@carlosfigueira的回答,我进一步研究了WebClient的方法并找到了UploadValues,这正是我想要的:

Using client As New Net.WebClient
    Dim reqparm As New Specialized.NameValueCollection
    reqparm.Add("param1", "somevalue")
    reqparm.Add("param2", "othervalue")
    Dim responsebytes = client.UploadValues(someurl, "POST", reqparm)
    Dim responsebody = (New Text.UTF8Encoding).GetString(responsebytes)
End Using

关键部分是:

client.UploadValues(someurl, "POST", reqparm)

它发送我键入的任何动词,它还帮助我创建一个正确的url编码表单数据,我只需要提供参数作为namevaluecollection。

答案 1 :(得分:14)

WebClient没有对表单数据的直接支持,但您可以使用UploadString方法发送HTTP帖子:

Using client as new WebClient
    result = client.UploadString(someurl, "param1=somevalue&param2=othervalue")
End Using

答案 2 :(得分:2)

就http动词而言,WebRequest可能更容易。你可以去寻找类似的东西:

    WebRequest r = WebRequest.Create("http://some.url");
    r.Method = "POST";
    using (var s = r.GetResponse().GetResponseStream())
    {
        using (var reader = new StreamReader(r, FileMode.Open))
        {
            var content = reader.ReadToEnd();
        }
    }

显然这缺少异常处理和编写请求体(您可以使用r.GetRequestStream()并将其写为常规流,但我希望它可能有所帮助。