Подтвердить что ты не робот

Отправка HTTP POST с помощью System.Net.WebClient

Можно ли отправлять HTTP POST с данными какой-либо формы с помощью System.Net.WebClient?

Если нет, есть ли другая библиотека, такая как WebClient, которая может выполнять HTTP POST? Я знаю, что могу использовать System.Net.HttpWebRequest, но я ищу что-то, что не так много.

Надеюсь, он будет выглядеть следующим образом:

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

Ответ 1

Основываясь на ответе @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, мне просто нужно предоставить параметры как имя_вычисления.

Ответ 2

WebClient не имеет прямой поддержки данных формы, но вы можете отправить сообщение HTTP с помощью метода UploadString:

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

Ответ 3

Что касается 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() и писать его как обычный поток, но я надеюсь, что это может помочь.