gpt4 book ai didi

asp.net - 如何在 ASP.NET 中以编程方式模拟 HTTP POST?

转载 作者:行者123 更新时间:2023-12-02 02:23:49 25 4
gpt4 key购买 nike

我需要以编程方式模拟 HTTP POST,即,我需要生成带有一些 POST 变量的请求,然后将其发送到页面。

为了澄清,我需要模拟常规 POST 的行为,而不是以编程方式完成整个事情。因此,基本上我需要以与发生表单 POST 时填写的方式相同的方式填写请求,然后将浏览器发送到需要 POST 的页面。

最佳答案

这是一种方法。

您可以以 NameValueCollection 的形式向此方法发送 url 和名称/值参数。该方法在端点上创建 Http Post 并以字符串形式返回响应。

当然,根据您执行此操作的内容/原因以及调用此方法的次数,可能还有其他选择。但在您提供有关您的具体需求的更多信息之前,此方法就足够了。

下面的方法使用任务 (.NET 4.0) 和异步方法,因此如果您在循环中进行多个调用,那么它会比同步方法(如下一个代码 list )更快。

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, 0, 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, 0, 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 - 如何在 ASP.NET 中以编程方式模拟 HTTP POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com