Remplir un formulaire sur une page distante et le valider

[Résolu]
Signaler
Messages postés
15
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2005
-
Messages postés
15
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2005
-
bonjour à tous,
je ne suis pas vraiment sûr que l'on puisse le faire mais bon, je demande au cas où. J'aimerai en fait me connecter à un site distant et y remplir son formulaire pour le valider, toujours à distance. Nous connaissons biensûr le nom des contrôles à remplir mais même en javascript, ils sont logiquement inaccessibles. Voila, si quel'un a une idée, j'en serais ravi.

P.S: Je parle biensûr de sites qui ne balancent pas les paramètres contenus dans leur url vers les contrôles (cf google).

2 réponses

Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
21
Tu parles donc de la méthode Post.

Tu peux soit utiliser le HttpWebClient en mettant la méthod à POST.


HttpWebRequest oWRequest =(HttpWebRequest) WebRequest.Create("http://localhost/Test1/result.aspx");
//écriture dans le flux d'interrogation
string sMessage = "txtNom=Richard";
oWRequest.ContentLength = sMessage.Length;
oWRequest.Method = "POST";
oWRequest.ContentType = "application/x-www-form-urlencoded";


Stream oS1 = oWRequest.GetRequestStream();
StreamWriter oSWriter = new StreamWriter(oS1);
oSWriter.Write(sMessage);
oSWriter.Flush();

//la réponse (idem que pour un GET)
HttpWebResponse oWResponse =(HttpWebResponse) oWRequest.GetResponse();
Stream oS = oWResponse.GetResponseStream();
StreamReader oSReader = new StreamReader(oS,System.Text.Encoding.ASCII);
txtResult.Text = oSReader.ReadToEnd();
oSReader.Close();
oS.Close();

Soit très simple utiliser un navigateur dans ton appli et faire un truc du genre :


object flags= 0;



object targetframe= "";



object headers = "Referer:" + url + '\r'+'\n'+ "Content-Type: application/x-www-form-urlencoded"+'\r'+'\n';



byte[] r =
new Byte[data.Length];



char[] c =
new
char[data.Length];


c = data.ToCharArray();



for(
int i = 0; i< data.Length;i++)


r[i] = Convert.ToByte(c[i]);



object post = r;



this.web.Navigate


(url,
ref flags,
ref


targetframe,
ref post,
ref headers);

ou data correspond à tes champs comme ceci : toto=1&Tata=34.

J'anticipes ta question, même en post ca marche.

::|The S@ib|::
MVP C#.NET
Messages postés
15
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2005

Merci de ton aide.
Je me suis concentré sur la deuxième méthode, mais je rencontre encore quelques problèmes. Ton objet "this.web" est-il un objet type WebBrowser ou un objet type InternetExplorer. Si je le définit comme un objet WB, il me met un Log sur la méthode Navigate (erreur inconnue). Et si je le définit comme un objet IE, qui possède aussi une méthode Navigate, il me met un Log sur l'instantiation de cet objet (accès refusé). Je suis un peu bloqué du coup. Si tu as une idée, n'hésites pas à m'en faire part.