1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
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;
} |
Partager