是否可以使用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
答案 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¶m2=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()
并将其写为常规流,但我希望它可能有所帮助。