|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
EXEMPLE UTILISATION HTTPWEBREQUEST, AFFICHER RÉPONSE HTTP À UNE REQUÊTE GET POST AVEC AFFICHAGE REDIRECTIONS
Information sur la source
Description
Ce programme permet d'envoyer des requêtes HTTP à un serveur Web, et de récupérer la réponse sous forme de texte dans un contrôle texte. Il gère les redirections une à une. Chaque réponses de demande de redirection est affichée. Et la redirection est intérrogée automatiquement. Les cookies sont aussi géré. Qu'ils proviennent de la réponse ou créés par l'utilisateur. Tout échec de la requête, qui entraine une exception résulte dans l'affichage de celle-ci comme résultat de la requête. On peut faire des requêtes GET et POST. Les données POST sont limitées à une ligne de texte. Les nouvelles requêtes n'écrasent pas les anciennes, ainsi on peut utiliser le programme pour annalyser une série de requête/réponse entre le navigateur et le serveur afin d'automatiser un processus, ou de récupérer l'adresse d'une page de saut intermédiaire. Le code n'étant pas commenté dans le fichier CS, je vais commenter la fonction de création, exécution de la requête dans la zone de code.
Source
- private bool DoResquest(string URL, out string newURL)
- {
- //Défini l'URL de destination de la redirection à vide. Car elle n'est définie que si il y a redirection.
- newURL = "";
- try
- {
- // Créer la requête HTTP.
- HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
- // Défini les champs de méthode, de type de navigateur, de types acceptés.
- req.Method = method.Text;
- req.UserAgent = useragent.Text;
- req.Accept = accept.Text;
- // Supprime le suivi de la redirection automatique.
- req.AllowAutoRedirect = false;
- // Défini les cookies, et si nécessaire, ajout le cookie utilisateur.
- req.CookieContainer = cookies;
- if (cookie.Text != "")
- {
- int signpos = cookie.Text.IndexOf("=");
- string cookiename = cookie.Text.Substring(0, signpos);
- string cookieval = cookie.Text.Substring(signpos + 1);
- req.CookieContainer.Add(new Cookie(cookiename, cookieval, "/", req.RequestUri.Host));
- }
- // Si la method est POST, alors il faut mettre les données dans le corps de la requête.
- if (method.Text == "POST")
- {
- string data = postdata.Text;
- // Définition des informations concernant le corps
- req.ContentLength = data.Length;
- req.ContentType = contenttype.Text;
- // Ecriture des données.
- Stream reqout = req.EndGetRequestStream(req.BeginGetRequestStream(new AsyncCallback(AsyncRequestWriter), null));
- StreamWriter wri = new StreamWriter(reqout, Encoding.GetEncoding(850));
- wri.Write(data);
- wri.Close();
- reqout.Close();
- }
- // Exécution de la requête.
- HttpWebResponse res = (HttpWebResponse)req.GetResponse();
- // Ajout des nouveaux cookies si présents.
- cookies.Add(res.Cookies);
- // Afficher les premières informations de la requête (Method, URL, Etat de réponse et en-têtes.
- result.Text += "---------------------------------------------------\r\n";
- result.Text += req.Method + " " + URL + "\r\n";
- result.Text += res.StatusCode + " - " + res.StatusDescription + "\r\n";
- result.Text += res.Headers.ToString() + "\r\n";
- // Suivant l'état. Redirection ou non.
- switch (res.StatusCode)
- {
- // Redirection normale.
- case HttpStatusCode.Redirect:
- method.SelectedIndex = 0;
- newURL = res.Headers.Get("Location");
- break;
- // Redirection gardant la methode.
- case HttpStatusCode.RedirectKeepVerb:
- newURL = res.Headers.Get("Location");
- break;
- // Redirection mettant la méthode à GET.
- case HttpStatusCode.RedirectMethod:
- method.SelectedIndex = 0;
- newURL = res.Headers.Get("Location");
- break;
- // Tout les autres état, nottament, OK
- default:
- // Affiche les données du flux
- Stream resin = res.GetResponseStream();
- StreamReader rea = new StreamReader(resin, Encoding.GetEncoding(850));
- result.Text += rea.ReadToEnd().Replace("\r\n", "\n").Replace("\n", "\r\n");
- rea.Close();
- resin.Close();
- break;
- }
- // Ferme la réponse
- res.Close();
- // Ferme la requête
- req.Close();
- }
- catch (Exception ex)
- {
- // Affiche l'exception dans la zone de résultat.
- result.Text += ex.ToString();
- }
- // Il y a redirection seulement si une adresse a été mise dans newURL.
- return newURL.Length != 0;
- }
private bool DoResquest(string URL, out string newURL)
{
//Défini l'URL de destination de la redirection à vide. Car elle n'est définie que si il y a redirection.
newURL = "";
try
{
// Créer la requête HTTP.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
// Défini les champs de méthode, de type de navigateur, de types acceptés.
req.Method = method.Text;
req.UserAgent = useragent.Text;
req.Accept = accept.Text;
// Supprime le suivi de la redirection automatique.
req.AllowAutoRedirect = false;
// Défini les cookies, et si nécessaire, ajout le cookie utilisateur.
req.CookieContainer = cookies;
if (cookie.Text != "")
{
int signpos = cookie.Text.IndexOf("=");
string cookiename = cookie.Text.Substring(0, signpos);
string cookieval = cookie.Text.Substring(signpos + 1);
req.CookieContainer.Add(new Cookie(cookiename, cookieval, "/", req.RequestUri.Host));
}
// Si la method est POST, alors il faut mettre les données dans le corps de la requête.
if (method.Text == "POST")
{
string data = postdata.Text;
// Définition des informations concernant le corps
req.ContentLength = data.Length;
req.ContentType = contenttype.Text;
// Ecriture des données.
Stream reqout = req.EndGetRequestStream(req.BeginGetRequestStream(new AsyncCallback(AsyncRequestWriter), null));
StreamWriter wri = new StreamWriter(reqout, Encoding.GetEncoding(850));
wri.Write(data);
wri.Close();
reqout.Close();
}
// Exécution de la requête.
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
// Ajout des nouveaux cookies si présents.
cookies.Add(res.Cookies);
// Afficher les premières informations de la requête (Method, URL, Etat de réponse et en-têtes.
result.Text += "---------------------------------------------------\r\n";
result.Text += req.Method + " " + URL + "\r\n";
result.Text += res.StatusCode + " - " + res.StatusDescription + "\r\n";
result.Text += res.Headers.ToString() + "\r\n";
// Suivant l'état. Redirection ou non.
switch (res.StatusCode)
{
// Redirection normale.
case HttpStatusCode.Redirect:
method.SelectedIndex = 0;
newURL = res.Headers.Get("Location");
break;
// Redirection gardant la methode.
case HttpStatusCode.RedirectKeepVerb:
newURL = res.Headers.Get("Location");
break;
// Redirection mettant la méthode à GET.
case HttpStatusCode.RedirectMethod:
method.SelectedIndex = 0;
newURL = res.Headers.Get("Location");
break;
// Tout les autres état, nottament, OK
default:
// Affiche les données du flux
Stream resin = res.GetResponseStream();
StreamReader rea = new StreamReader(resin, Encoding.GetEncoding(850));
result.Text += rea.ReadToEnd().Replace("\r\n", "\n").Replace("\n", "\r\n");
rea.Close();
resin.Close();
break;
}
// Ferme la réponse
res.Close();
// Ferme la requête
req.Close();
}
catch (Exception ex)
{
// Affiche l'exception dans la zone de résultat.
result.Text += ex.ToString();
}
// Il y a redirection seulement si une adresse a été mise dans newURL.
return newURL.Length != 0;
}
Conclusion
Si vous trouvez le besoin de vouloir définir d'autres champs HTTP, celà peut se faire. N'oubliez pas de lire les infos-bulles :) Pour toutes questions, soit en commentaire, soit sur le chan C-S à MyGoddess (N'oubliez pas de préciser le sujet). J'espère que ca pourra vous être utile.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
TcpClient ou HttpWebRequest pour un POST ou GET [ par Blacknight91 ]
Bl@cknightBonjour,Je voudrais savoir comment utiliser l'une de ces 2 classes (TcpClient ou HttpWebRequest) afin d'envoyer une requête POST ou GET dans
POST {content : encoded} httpwebrequest [ par c0nsur ]
Bonjour,jaimerais savoir comment POSTER aec httpwebrequest à une page .PHP en fait, je sais comment poster les données.... mais jai un pro
requête HTTP POST [ par fregolo52 ]
Bonjour,Je voudrais rendre plus simple la configuration d'un module Wifi. Je veux donner le strict minimum d'info pour que l'utilisateur final ne soit
WebBrowser, GET/POST [ par Gendal67 ]
Bonjour à tous,J'ai un petit souci et je viens solliciter votre aide, en espérant que quelqu'un ait une solution.Voilà, je développe une application u
erreur [ par discus74 ]
Bonjour,J'ai mis une video flash sur mon site: http://www.haute-savoie-aventures.com/video.htmMais la video n'apparait pas , j'ai un meesage: erreur l
Lecture d'une checkbox excel [ par vince1303 ]
BonjourJe dois lire un fichier excel pour une de mes application. Pour tout ce qui se trouve dans une cellule, pas de problème. Mais, j'ai aussi des c
[WebClient]Envoyer en post un fichier + des données [ par ethan_decoster ]
Bonjour à tous,Je dois envoyer sur un serveur PHP une requête avec 4 paramètres et un fichier par la méthode POST.Pour cà je procède en 4 étapes : 1.
probleme heritage (objet) [ par djmanu78 ]
bonjour tout le monde,j'ai quelques difficultées à trouver la solution à mon problème.je m'explique :j'ai creer une classe macollec qui regroupe dans
probleme heritage [ par djmanu78 ]
bonjour tout le monde,j'ai quelques difficultées à trouver la solution à mon problème.je m'explique :j'ai creer une classe macollec qui regroupe dans
Ajout de valeur dans un combo bindé [ par olibara ]
Bonjour,J'ai pas mal sué pour savoir comment ajouter une valeur dans un combo bindéNon pas comment ajouter la valeur au datasource mais comment gerer
|
Téléchargements
Logiciels à télécharger sur le même thème :
|