J'ai une application winforms sur laquelle j'ai travaillé et qui exécute plusieurs tests sur des comptes clients. Les tests nécessitent une connexion unique pour s'exécuter.C# Demande Web utilisant des cookies
string paramaters = "authmethod=on&chkRememberMe=on&login-form-type=pwd&password=" + pw.Text + "&userid=" + uid.Text + "&username=" + uid.Text;
string strResponse;
HttpWebRequest requestLogin = (HttpWebRequest)WebRequest.Create("https://www.url.com/login.form");
requestLogin.Method = "POST";
requestLogin.CookieContainer = cookieJar;
requestLogin.ContentType = "application/x-www-form-urlencoded";
requestLogin.ContentLength = paramaters.Length;
StreamWriter stOut = new StreamWriter(requestLogin.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(paramaters);
stOut.Close();
StreamReader stIn = new StreamReader(requestLogin.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();
Ce script fonctionne pour la connexion très bien, le problème est quand je dois courir en fait les tests que je dois retourner tous les résultats dans une chaîne (résultats HTML).
private string runTestRequest(Uri url, string parameters)
{
string testResults = string.Empty;
HttpWebRequest runTest = (HttpWebRequest)WebRequest.Create(url);
runTest.CookieContainer = cookieJar;
runTest.Method = "POST";
runTest.ContentType = "application/x-www-form-urlencoded";
StreamWriter stOut = new StreamWriter(runTest.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(parameters);
stOut.Close();
StreamReader stIn = new StreamReader(runTest.GetResponse().GetResponseStream());
testResults = stIn.ReadToEnd();
stIn.Close();
return testResults;
}
Mais ça marche et tente de se connecter. Comment puis-je utiliser le cookie de la demande de connexion précédente avec ce + de nombreuses autres demandes Web?
Merci pour l'aide.
EDIT:
J'ajouté à mon code mais qui devrait faire la même chose que BrokenGlass dit, sauf un peu différent, mais ne fonctionne toujours pas.
foreach (Cookie cookie in responseLogin.Cookies)
{
cookieJar.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), cookie.Path, cookie.Domain));
richTextBox2.Text += cookie.Name.ToString() + Environment.NewLine + cookie.Value.ToString() + Environment.NewLine + cookie.Path.ToString() + Environment.NewLine + cookie.Domain.ToString();
}
Avez-vous vérifié ce qui est en CookieJar lors de l'exécution nouvelle demande? ça contient quelque chose? – Artemiy
J'ai fait un MessageBox.Show (cookieJar.Count.ToString()); et il a montré que le compte est 2 – Alex