你如何以编程的方式填写表单和'发布'的网页?

使用C#和ASP.NET我想以编程方式在网页(表单)上填写一些值(4个文本框),然后“POST”这些值。 我如何做到这一点?

编辑:澄清:有一个服务(www.stopforumspam.com),您可以在其“添加”页面上提交ip,用户名和电子邮件地址。 我希望能够在我的网站的页面上创build一个链接/button,将填写这些值,并提交信息,而不必复制/粘贴,并单击提交button。

进一步澄清:如何自动垃圾邮件机器人填写表单,并单击提交button,如果他们用C#写的?

你可以在这里看到一个样本: http : //en.csharp-online.net/HTTP_Post

基本上,代码将如下所示:

WebRequest req = WebRequest.Create("http://mysite/myform.aspx"); 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(); 

您可以使用WebClient上的UploadValues方法 – 它只需要传递一个URL和一个NameValueCollection。 这是我find的最简单的方法,MS文档有一个很好的例子:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

这是一个简单的版本,有一些error handling:

 var webClient = new WebClient(); Debug.Info("PostingForm: " + url); try { byte [] responseArray = webClient.UploadValues(url, nameValueCollection); return new Response(responseArray, (int) HttpStatusCode.OK); } catch (WebException e) { var response = (HttpWebResponse)e.Response; byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream()); return new Response(responseBytes, (int) response.StatusCode); } 

Response类是响应正文和状态码的简单包装。

查看页面的源代码并使用WebRequest类来完成发布。 无需驱动IE。 只要找出什么IE发送到服务器和复制。 使用像Fiddler这样的工具将使它更容易。

您可以通过多种方式发送post/获取请求。 不同types的图书馆有帮​​助。 我发现select我应该使用哪一个,它们之间有什么区别令人困惑的

冲浪堆栈溢出后,这是我发现最佳答案 。 这个线程解释了所有

https://stackoverflow.com/a/4015346/1999720

我有一个情况,我需要从一个HTML textarea编程免费文本,我有问题,我正在build立我的参数列表中的<br />

我的解决scheme是用换行符和htmlencodingreplacebr标签以保证安全。

 Regex.Replace( HttpUtility.HtmlDecode( test ), "(<br.*?>)", "\r\n" ,RegexOptions.IgnoreCase); 

你在哪里编码string:

Encoding.Default.GetBytes(POSTDATA);

使用Ascii代替谷歌apis:

Encoding.ASCII.GetBytes(POSTDATA);

这使得您的请求与“curl –data”…“[url]”请求相同