Como você programaticamente preencher um formulário e “POST” uma página da web?

Usando c # e asp.net Eu quero preencher alguns valores programaticamente (4 checkboxs de texto) em uma página da web (formulário) e, em seguida, ‘POST’ esses valores. Como eu faço isso?

Edit: Esclarecimento: Existe um serviço (www.stopforumspam.com) onde você pode enviar ip, nome de usuário e endereço de e-mail em sua página ‘add’. Eu quero ser capaz de criar um link / botão na página do meu site que irá preencher esses valores e enviar as informações sem ter que copiar / colar-los e clique no botão enviar.

Esclarecimentos adicionais: Como os robôs de spam automatizados preenchem formulários e clicam no botão de envio se eles foram escritos em C #?

Você pode ver uma amostra disso aqui: http://en.csharp-online.net/HTTP_Post

Basicamente, o código será algo como isto:

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(); 

Você pode usar o método UploadValues ​​no WebClient – tudo o que é necessário é passar um URL e um NameValueCollection. É a abordagem mais fácil que encontrei e a documentação do MS tem um bom exemplo:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

Aqui está uma versão simples com algum tratamento de erros:

 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); } 

A class Response é um wrapper simples para o corpo da resposta e o código de status.

Veja a origem da página e use a class WebRequest para fazer o lançamento. Não há necessidade de dirigir o IE. Basta descobrir o que o IE está enviando para o servidor e replicar isso. Usar uma ferramenta como o Fiddler tornará tudo ainda mais fácil.

você pode enviar uma solicitação post / get de várias maneiras. Diferentes tipos de biblioteca estão lá para ajudar. Descobri que é confuso escolher qual deles devo usar e quais são as diferenças entre eles.

Após o estouro da pilha de surf, esta é a melhor resposta que encontrei . esta discussão explica tudo

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

Eu tive uma situação onde eu precisava postar texto livre de uma área de texto html programaticamente e eu tive problemas onde eu estava ficando
na minha lista de param que eu estava construindo.

Minha solução foi uma substituição das tags br com caracteres linebreak e htmlencoding apenas por segurança.

 Regex.Replace( HttpUtility.HtmlDecode( test ), "(
)", "\r\n" ,RegexOptions.IgnoreCase);

Onde você codifica a string:

Encoding.Default.GetBytes (postData);

Use Ascii para o google apis:

Encoding.ASCII.GetBytes (postData);

isso faz com que o seu pedido seja o mesmo e equivalente “curl –data” … “[url]” request