如何在ASP.NET中以程序方式模拟HTTP POST?
发布时间:2020-12-15 19:24:23 所属栏目:asp.Net 来源:网络整理
导读:我需要在程序上模拟一个HTTP POST,也就是说,我需要用一些POST变量生成一个Request,然后将它发送到一个页面. 要澄清一点,我需要模拟一个常规POST的行为,而不是以整体的方式进行编程.所以基本上我需要填写一个请求,就像Post POST表单一样,填写一个Request,然后
我需要在程序上模拟一个HTTP POST,也就是说,我需要用一些POST变量生成一个Request,然后将它发送到一个页面.
要澄清一点,我需要模拟一个常规POST的行为,而不是以整体的方式进行编程.所以基本上我需要填写一个请求,就像Post POST表单一样,填写一个Request,然后将浏览器发送到期望POST的页面. 解决方法
这是一种方法.
您可以以NameValueCollection的形式发送此方法的url和name / value参数.该方法在端点上创建一个Http Post,并将其作为字符串返回. 当然,这取决于什么/为什么你这样做,这个方法将被称为多少次,还有其他的选择.但是,直到您提供有关您的具体需求的更多信息,这种方法是足够好的. 下面的方法使用Tasks(.NET 4.0)和异步方法,所以如果你在一个循环中进行多个调用,它将比下一个代码列表中的同步方法更快. static string GetWebResponse(string url,NameValueCollection parameters) { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; httpWebRequest.Method = "POST"; var sb = new StringBuilder(); foreach (var key in parameters.AllKeys) sb.Append(key + "=" + parameters[key] + "&"); sb.Length = sb.Length - 1; byte[] requestBytes = Encoding.UTF8.GetBytes(sb.ToString()); httpWebRequest.ContentLength = requestBytes.Length; using (var requestStream = httpWebRequest.GetRequestStream()) { requestStream.Write(requestBytes,requestBytes.Length); requestStream.Close(); } Task<WebResponse> responseTask = Task.Factory.FromAsync<WebResponse>(httpWebRequest.BeginGetResponse,httpWebRequest.EndGetResponse,null); using (var responseStream = responseTask.Result.GetResponseStream()) { var reader = new StreamReader(responseStream); return reader.ReadToEnd(); } } 你也可以使用WebClient(它比较简单).此方法期望post参数作为表单中的字符串 name1=value1&name2=value2&name3=value3 所以如果你使用这个方法一定要传递你的参数,或者修改实现就像上面的代码. static string HttpPost(string url,string Parameters) { var req = System.Net.WebRequest.Create(url); req.ContentType = "application/x-www-form-urlencoded"; req.Method = "POST"; byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters); req.ContentLength = bytes.Length; System.IO.Stream os = req.GetRequestStream (); os.Write (bytes,bytes.Length); os.Close (); System.Net.WebResponse resp = req.GetResponse(); if (resp== null) return null; var sr = new StreamReader(resp.GetResponseStream()); return sr.ReadToEnd().Trim(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 在Owin Identity和Asp.Net MVC中正确使用声
- asp.net – 是否使用Page_IsValid或Page_ClientValidate()(
- .NET牛人应该知道些什么,我的回答
- asp.net-mvc – MVC 5渲染视图到字符串
- asp.net – 请求Facebook访问令牌时400错误请求
- asp.net – Outputcache:VaryByHeader =“User-Agent”或V
- asp.net-mvc – ASP.Net MVC:发送JSON到控制器
- asp.net-mvc – 具有MasterPage的视图上的多个AntiForgeryT
- asp.net – 在更改密码时从所有浏览器注销用户
- asp.net – 引用不稳定的DLL
推荐文章
站长推荐
热点阅读