关于c#:您如何以编程方式填写表格并“发布”网页?

关于c#:您如何以编程方式填写表格并“发布”网页?

How do you programmatically fill in a form and 'POST' a web page?

使用C#和ASP.NET,我想以编程方式在网页(窗体)上填写一些值(4个文本框),然后"发布"这些值。 我该怎么做呢?

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

进一步说明:自动垃圾邮件机器人如何填写表格并单击"提交"按钮(如果它们是用C#编写的)?


您可以在此处查看该示例:http://en.csharp-online.net/HTTP_Post

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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。这是我发现的最简单的方法,MS文档提供了一个很好的示例:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

这是带有一些错误处理的简单版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
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之类的工具将使其变得更加容易。


您可以通过多种方式发送发布/获取请求。不同类型的库可为您提供帮助。
我发现选择我应该使用的选项以及它们之间的区别是令人困惑的。

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

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


在哪里编码字符串:

Encoding.Default.GetBytes(postData);

使用Ascii代替Google API:

Encoding.ASCII.GetBytes(postData);

这使您的请求与等效的" curl --data" ..." [url]"请求相同


我遇到这样的情况,我需要以编程方式从html文本区域发布自由文本,并且遇到我正在建立的参数列表中出现
的问题。

为了安全起见,我的解决方案是用换行符和htmlencoding替换br标签。

1
2
3
Regex.Replace( HttpUtility.HtmlDecode( test ),"(<br.*?>)","

"
,RegexOptions.IgnoreCase);


推荐阅读