2009-07-21 1 views
2

Il existe de nombreux sites qui appellent un script à la soumission de formulaire et transmettent des paramètres en utilisant HTTP POST ou GET, en utilisant un débogueur Web j'ai trouvé les paramètres transmis. Maintenant, je souhaite faire la même chose à travers mon application Windows en C#. Comment puis-je réaliser une telle fonctionnalité? J'utilise actuellement la classe HttpWebRequest et HttpWebResponse en C#. Mais c'est une douleur car je dois écrire du code explicite pour chaque page que j'essaie de charger et de travailler. Par exemple j'essaye de passer le nom d'utilisateur et le mot de passe à une page de php et en prenant la réponse, qui enverra un cookie et une page en retour, basée sur laquelle j'identifie si l'utilisateur s'est connecté ou pas.effectuer des méthodes http à l'aide de l'application Windows dans C#

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; 
     } 

Suis-je sur la bonne voie? Y a-t-il une meilleure façon de le faire?

+0

Avez-vous regardé la classe WebClient? Il enveloppe une grande partie de la plomberie impliquée dans les classes HttpWebRequest/Response –

Répondre

6

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 
} 
+0

où puis-je trouver plus d'exemples pour l'implémentation de System.Net.WebClient. –

+0

Plus d'exemples sur l'utilisation que vous voulez dire? Ou comment est-il programmé? – womp

+0

Comment est-il programmé, je peux trouver sur MSDN je suppose, mais je veux plus d'exemples de l'utiliser. –

Questions connexes