如何在ASP.NET中以程序方式模拟HTTP POST?

前端之家收集整理的这篇文章主要介绍了如何在ASP.NET中以程序方式模拟HTTP POST?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在程序上模拟一个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相关文章