Remplir un formulaire sur un site web

Signaler
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
-
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
-
Bonsoir,

Je dois automatiser la validation d'un formulaire web afin de m'identifier (login et mot de passe) pour ensuite pouvoir télécharger un fichier.

Je procède donc ainsi :

try
{
HttpWebRequest oWRequest = (HttpWebRequest) WebRequest.Create("http://www.extranet.fbf.fr");
//écriture dans le flux d'interrogation
//Username et Password sont les champs du formulaire web
string sMessage = "Username=toto&Password=tata";
oWRequest.ContentLength = sMessage.Length;
//le site web utilise la méthode POST
oWRequest.Method = "POST";

oWRequest.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
HttpWebResponse oWResponse =(HttpWebResponse) oWRequest.GetResponse();

Stream oS1 = oWRequest.GetRequestStream();
StreamWriter oSWriter = new StreamWriter(oS1);
oSWriter.Write(sMessage);
oSWriter.Flush();
}
catch (WebException E)
{
Console.WriteLine(E.Message);
}

Au bout de 1 ou 2 minutes, j'obtiens ce message d'erreur :


Unhandled Exception: System.InvalidOperationException: The response for this req
uest cannot be retrieved until request data has been written.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.HttpWebRequest.GetResponse()
at DefaultNamespace.MainClass.Main(String[] args) in d:\Documents\sollivier\M
es documents\SharpDevelop Projects\Import Cassiopée\Main.cs:line 34
Appuyez sur une touche pour continuer...

Quelqu'un aurait-il une idée ?

Merci d'avance,

3 réponses

Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
22
Tu fait ton GetResponse avoir d'avoir écrit dans ton stream.

//Reponse
HttpWebResponse oWResponse =(HttpWebResponse) oWRequest.GetResponse();

//Requete
Stream oS1 = oWRequest.GetRequestStream();
StreamWriter oSWriter = new StreamWriter(oS1);
oSWriter.Write(sMessage);
oSWriter.Flush();
}
catch (WebException E)
{
Console.WriteLine(E.Message);
}

Requete avant de demander la reponse :)

::|The S@ib|::
MVP C#.NET
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
3
Oui merci :)

En revanche, j'ai 2 autres questions:

- Comment puis-je tester si mon identification a bien fonctionné ?
- Le fichier que je télécharge est un fichier Excel. Je le télécharge bien mais quand je l'ouvre, il me dit qu'il lui manque un fichier .css. Y a t-il un moyen de télécharger les fichiers qui sont liés à celui qui m'intéresse ?

Merci d'avance,
Messages postés
103
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
10 septembre 2007
3
Hum en fait je crois qu'il me télécharger n'importe quel fichier.
Pour télécharger mon fichier, j'exécute ce code :

string remoteUri = "http://www.extranet.fbf.fr/Web/Extranet/ExtraMain.nsf/DocumentsByIDWeb/5JRK6G/$File/";
string fileName "Historique_Euribor_quotidiens.xls", myStringWebResource null;
// Create a new WebClient instance.
WebClient myWebClient = new WebClient();
// Concatenate the domain with the Web resource filename.
myStringWebResource = remoteUri + fileName;
Console.WriteLine("Downloading File "{0}" from "{1}" .......\n\n", fileName, myStringWebResource);
// Download the Web resource and save it into the current filesystem folder.
myWebClient.DownloadFile(myStringWebResource,fileName);
Console.WriteLine("Successfully Downloaded File "{0}" from "{1}"", fileName, myStringWebResource);
Console.WriteLine("\nDownloaded file saved in the following file system folder:\n\t" + Application.StartupPath);

En fait, si je change la valeur de ma variable "filename" et que je mets un nom au hasard, bah il me télécharge toujours un fichier alors que logiquement il devrait me dire que ce fichier n'existe pas ...