Question

Il existe de nombreux sites qui appellent un script sur la forme et soumettre passer des paramètres via HTTP POST ou GET, en utilisant un débogueur web j'ai trouvé les paramètres étant passés. Maintenant, je veux faire la même chose dans mon application Windows en C #. Comment puis-je obtenir une telle fonctionnalité?

Je suis actuellement en utilisant HttpWebRequest et HttpWebResponse classe en C #. Mais il est une douleur que je dois écrire un code explicite pour chaque page je tente de charger et de travail. Par exemple, je suis en train de passer le nom d'utilisateur et mot de passe à une page php et en prenant la réponse, qui envoie un cookie et une page en retour, sur la base que j'identifie si l'utilisateur est connecté ou non.

HttpWebRequest loginreq = createreq("http://www.indyarocks.com/mobile/index.php");
                String logintext = "username=" + TxtUsrname.Text + "&pass=" + TxtPasswd.Password + "&button.x=0&button.y=0";
                loginreq.ContentLength = logintext.Length;
                StreamWriter writerequest = new StreamWriter(loginreq.GetRequestStream());
                writerequest.Write(logintext);
                writerequest.Close();
                HttpWebResponse getloginpageresponse = (HttpWebResponse)loginreq.GetResponse();
                cookie = getloginpageresponse.Cookies[0];
                BinaryFormatter bf1 = new BinaryFormatter();
                Stream f1 = new FileStream("E:\\cookie.dat", FileMode.OpenOrCreate);
                bf1.Serialize(f1, cookie);
                f1.Close();

                string nexturl = getloginpageresponse.Headers[HttpResponseHeader.Location];
                StreamReader readresponse = new StreamReader(getloginpageresponse.GetResponseStream());
                if (nexturl == "p_mprofile.php")
                {
                    MessageBox.Show("Login Successful");
                    GrpMsg.IsEnabled = true;
                }
                else if (nexturl == "index.php?msg=1")
                {
                    MessageBox.Show("Invalid Credentials Login again");
                }

Ceci est ma classe createreq

 private HttpWebRequest createreq(string url)
        {
            HttpWebRequest temp = (HttpWebRequest)WebRequest.Create(url);
            temp.Method = "POST";
            temp.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; FDM)";
            temp.KeepAlive = true;
            temp.ContentType = "application/x-www-form-urlencoded";
            temp.CookieContainer = new CookieContainer();
            temp.AllowAutoRedirect = false;
            return temp;
        }

Je suis sur la bonne voie? Y at-il une meilleure façon de le faire?

Était-ce utile?

La solution

Vous devez utiliser System.Net.WebClient.

Vous pouvez l'utiliser pour faire une demande avec une méthode et en-têtes que vous souhaitez, et obtenir la page résultante avec une lecture simple flux.

Il y a un exemple simple sur la page MSDN, mais quelques exemples de code pour l'utiliser pourrait ressembler à:

WebClient webclient= new WebClient();

using (StreamReader reader = new StreamReader(webclient.OpenRead("http://www.google.com")))
{
        string result = reader.ReadToEnd();
         // Parse web page here
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top