C# HttpWebRequest Méthode Post de nombreux paramètres dans le formulaire
Je suis en train d'écrire un simple programme C# pour faire quelques requêtes web et la publication des données.
Je comprends comment les notions de base de travail comme la façon de se connecter avec un mot de passe et les choses d'un formulaire html.
Cependant, je me demande si il y a beaucoup de paramètres d'entrée (comme cette question de la page ) comme des cases à cocher et des champs de texte, est-il une méthode efficace de codage en dur des 20 paramètres dans une chaîne de caractères et de les transmettre? Je peux lire le fichier html de l'analyser et de l'analyse l'entrée et utiliser le générateur de Chaîne pour faire une telle chaîne, mais je me demandais est-il une méthode plus efficace que de le faire?
private HtmlAgilityPack.HtmlDocument getpage(string url ,String input)
{
try
{
Stream datastream;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.AllowAutoRedirect = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
request.ContentType = "application/x-www-form-urlencoded";
if (input!=null)
{
String postData = "";
request.Method = "POST";
if (input == "login")
{
postData = String.Format("username={0}&password={1}", "myusername", "mypassword");
}
else if (input == "sendMessage")
{
//THIS IS THE LONG STRING THAT I DON'T WANT TO HARD CODE
postData = String.Format("reciever={0}&sendmessage={1}", "thepersontomessage" ,this.DefaultMessage);
//I am just puting two parameters for now, there should be alot
}
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
datastream = request.GetRequestStream();
datastream.Write(byteArray, 0, byteArray.Length);
datastream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
datastream = response.GetResponseStream();
String sourceCode = "";
using (StreamReader reader = new StreamReader(datastream))
{
sourceCode = reader.ReadToEnd();
}
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(sourceCode);
this.cookies.Add(response.Cookies);
return htmlDoc;
}
catch (Exception)
{
return null;
}
Aussi est-il un moyen simple de voir quelles sont les valeurs de paramètre réglé lorsque je clique sur un bouton dans un formulaire html dans un navigateur (en gros le post chaîne d'url et les valeurs de paramètre qui est envoyé) afin que je puisse coder en dur ces valeurs dans l'Postdatastring (cases à cocher, textes, etc)
OriginalL'auteur noobiehacker | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
Personnellement ce que je voudrais faire est de construire les paramètres comme un
Dictionary<string,string>
de sorte que vous pouvez faire:Vous pouvez alors avoir une méthode telle que:
Vous pouvez obtenir le dernier paramètre en chaîne avec:
Hey Merci pour la réponse , je ne sais pas pourquoi quelqu'un serait downvote vous pour aucune raison apparente, mais je suppose que de mettre la Clé et la valeur dans le dictionnaire, j'ai encore à analyser le code Html et d'obtenir toutes les entrées de la forme droite? pas d'autre moyen plus simple?
Vous pouvez utiliser le même dictionnaire mentionné ci-dessus, puis de le transmettre à WebClient.UploadValues(). qui va formater le POST de FORMULAIRE correctement pour vous. Vous n'avez pas à créer la chaîne de requête, vous-même.
mais que faire si l'un des paramètres est un fichier? dois-je le convertir en byte [], puis à la chaîne?
Pas de. C'est tout simplement pour que les données envoyées dans le
application/x-www-form-urlencoded
. Si vous voulais en charge les fichiers que vous auriez probablement besoin d'utilisermultipart/form-data
.OriginalL'auteur Lloyd