Sending HTTP POST with System.Net.WebClient

后端 未结 3 1784
自闭症患者
自闭症患者 2020-12-05 02:39

Is it possible to send HTTP POST with some form data with System.Net.WebClient?

If not, is there another library like WebClient that can do HTTP POST? I know I can u

相关标签:
3条回答
  • 2020-12-05 02:50

    WebClient doesn't have a direct support for form data, but you can send a HTTP post by using the UploadString method:

    Using client as new WebClient
        result = client.UploadString(someurl, "param1=somevalue&param2=othervalue")
    End Using
    
    0 讨论(0)
  • 2020-12-05 02:56

    Based on @carlosfigueira 's answer, I looked further into WebClient's methods and found UploadValues, which is exactly what I want:

    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
    

    The key part is this:

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

    It sends whatever verb I type in, and it also helps me create a properly url encoded form data, I just have to supply the parameters as a namevaluecollection.

    0 讨论(0)
  • 2020-12-05 03:13

    As far as the http verb is concerned the WebRequest might be easier. You could go for something like:

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

    Obviously this lacks exception handling and writing the request body (for which you can use r.GetRequestStream() and write it like a regular stream, but I hope it may be of some help.

    0 讨论(0)
提交回复
热议问题