我在实习期间被要求发布创建一个向服务器提交信息的表单,现在我要尽可能多地以编程方式提交该表单以测试该网站并尝试通过接收这么多来查看它是否会中断数据一下子。我是一个新手,我试着搜索如何做到但仍然没有得到它。这是我试过的。
namespace project_1
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebRequest req = WebRequest.Create("http://localhost:68644/project-2");
string postData = "item1=11111&item2=22222&Item3=33333";
byte[] send = Encoding.Default.GetBytes(postData);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = send.Length;
Stream sout = req.GetRequestStream();
sout.Write(send, 0, send.Length);
sout.Flush();
sout.Close();
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();
}
}
}
p.s我得到了这个想法:How do you programmatically fill in a form and 'POST' a web page? 但我不断收到此错误消息:“请求已中止:操作已超时”
感谢您的预期帮助。
答案 0 :(得分:1)
好的,我认为你误解了从asp.net或任何其他http服务器请求页面时发生的事情。
首先,客户端使用HTTP请求页面。通常这是页面的初始GET请求,例如/MyForm.aspx从浏览器制作
然后在服务器上执行c#代码。这将创建html页面。
客户端最有可能浏览器获取服务器创建的页面并呈现html,JavaScript,css ...这是在客户端计算机上完成的,如果您从以下位置发出请求,则此计算机无法运行c#浏览器。
然后客户端填写表单中的字段,一旦按下提交按钮,浏览器就会使用POST方法从客户端向服务器发送另一个HTTP请求。 POST方法与GET不同,因为它的目的是拥有HTTP的主体部分。在该主体部分内,您有表单数据。通常,数据格式为x-www-form-urlencoded字符串。
然后服务器运行服务器代码以进行发布。 查看正在发生的事情的最佳方法是使用Fiddler这是一个旨在向您显示http请求的http代理。
您的代码现在正在做的是创建整个过程的发布请求。并且c#代码在这方面工作正常。您获得的错误与项目-2上运行的错误有关,因为服务器没有响应。
这可能会导致许多问题(代理设置错误,服务器上运行的代码长,dns问题......)
但是大多数编写良好的服务器都会阻止您按设计进行此操作。这是一个安全问题,不应该这么简单。所以你可能没有得到任何设计的回应。