使用C#和ASP.NET我想以编程方式在网页(表单)上填写一些值(4个文本框),然后“POST”这些值。我该怎么做?
编辑:澄清:有一项服务(www.stopforumspam.com),您可以在其“添加”页面上提交IP,用户名和电子邮件地址。我希望能够在我的网站页面上创建一个链接/按钮,用于填写这些值并提交信息,而无需复制/粘贴它们,然后单击提交按钮。
进一步澄清:自动垃圾邮件机器人如何填写表格,如果用C#编写,请点击提交按钮?
答案 0 :(得分:46)
您可以在此处查看示例: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();
答案 1 :(得分:4)
您可以在WebClient上使用UploadValues方法 - 它只需要传递URL和NameValueCollection。这是我找到的最简单的方法,MS文档有一个很好的例子:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx
这是一个带有错误处理的简单版本:
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类是响应正文和状态代码的简单包装器。
答案 2 :(得分:1)
查看页面的来源并使用WebRequest类进行发布。无需驾驶IE。只需弄清楚IE正在向服务器发送什么并复制它。使用像Fiddler这样的工具可以使它变得更加容易。
答案 3 :(得分:0)
我有一种情况,我需要以编程方式从html textarea发布自由文本,并且我在我正在构建的参数列表中遇到了<br />
的问题。
我的解决方案是使用换行符和htmlencoding替换br标签只是为了安全。
Regex.Replace( HttpUtility.HtmlDecode( test ), "(<br.*?>)", "\r\n" ,RegexOptions.IgnoreCase);
答案 4 :(得分:0)
编码字符串的位置:
Encoding.Default.GetBytes(POSTDATA);
使用Ascii代替google apis:
Encoding.ASCII.GetBytes(POSTDATA);
这使得您的请求与#34; curl --data&#34; ...&#34;相同。 [网址]&#34;请求
答案 5 :(得分:0)
您可以通过多种方式发送帖子/获取请求。不同类型的图书馆可以提供帮助。 我发现选择哪一个以及其中的差异是令人困惑。
在浏览堆栈溢出后,这是我找到的最佳答案。这个帖子解释了所有