2008-08-25 7 views
30

En utilisant C# et ASP.NET, je veux remplir par programme certaines valeurs (4 zones de texte) sur une page Web (formulaire), puis "POST" ces valeurs. Comment puis-je faire cela?Comment remplissez-vous par programme un formulaire et "POSTEZ" une page Web?

Editer: Clarification: Il existe un service (www.stopforumspam.com) où vous pouvez envoyer votre adresse IP, votre nom d'utilisateur et votre adresse e-mail sur leur page "Ajouter". Je veux être en mesure de créer un lien/bouton sur la page de mon site qui va remplir ces valeurs et soumettre l'information sans avoir à copier/coller à travers et cliquez sur le bouton soumettre. Précision supplémentaire: Comment les robots spammeurs automatisés remplissent-ils les formulaires et cliquent sur le bouton «soumettre» s'ils ont été écrits en C#?

+0

Jetez un oeil à [Watin] (http://watin.sourceforge.net/) – SQLMenace

Répondre

43

Vous pouvez voir un échantillon de ce ici: http://en.csharp-online.net/HTTP_Post

Fondamentalement, le code ressemblera à quelque chose comme ceci:

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

Ne serait-pas le besoin d'être postData urlencoded? –

+0

Pourriez-vous expliquer comment collecter les données renvoyées à partir de la demande? –

+3

Dans l'exemple ci-dessus, la valeur de retour contient les données renvoyées à partir de la demande. –

1

Voir la source de la page et utiliser la classe WebRequest pour faire l'affichage . Pas besoin de conduire IE. Juste comprendre ce que IE envoie au serveur et répliquer cela. L'utilisation d'un outil comme Fiddler rendra la tâche encore plus facile.

4

Vous pouvez utiliser la méthode UploadValues ​​sur WebClient - tout ce dont vous avez besoin est de transmettre une URL et un NameValueCollection. Il est l'approche la plus simple que j'ai trouvé, et la documentation de MS a un bel exemple:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

Voici une version simple avec une gestion des erreurs:

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

La classe Response est une simple enveloppe pour le corps de la réponse et le code d'état.

0

J'avais une situation où j'avais besoin de poster du texte libre à partir d'une zone de texte html par programme et j'avais des problèmes où j'obtenais <br /> dans ma liste de paramètres que je construisais.

Ma solution était un remplacement des balises br avec des caractères de saut de ligne et htmlencoding juste pour être sûr.

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

Où vous encodez la chaîne:

Encoding.Default.GetBytes (POSTDATA);

utilisation Ascii place pour les API Google:

Encoding.ASCII.GetBytes (PostData);

cela fait votre demande le même que et l'équivalent « curl --data » ... « [url] » demande

1

vous pouvez envoyer un message/se demande avec de nombreuses façons. Différents types de bibliothèques sont là pour vous aider. J'ai trouvé c'est confondre pour choisir lequel je devrais utiliser et quelles sont les différences parmi eux.

Après avoir surfé le débordement de la pile, voici la meilleure réponse que j'ai trouvée. ce fil explique tout

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

Questions connexes