2010-12-29 2 views
0

J'ai trouvé cet extrait de code here qui vous permettra de vous connecter sur un site internet et d'obtenir la réponse de la page connectée. Cependant, j'ai de la difficulté à comprendre toute la partie du code. J'ai fait de mon mieux pour remplir tout ce que je comprends jusqu'à présent. J'espère que vous pouvez remplir les blancs pour moi. MerciComprendre WebRequest

string nick = "mrbean"; 
string password = "12345"; 

//this is the query data that is getting posted by the website. 
//the query parameters 'nick' and 'password' must match the 
//name of the form you're trying to log into. you can find the input names 
//by using firebug and inspecting the text field 
string postData = "nick=" + nick + "&password=" + password; 

// this puts the postData in a byte Array with a specific encoding 
//Why must the data be in a byte array? 
byte[] data = Encoding.ASCII.GetBytes(postData); 

// this basically creates the login page of the site you want to log into 
WebRequest request = WebRequest.Create("http://www.mrbeanandme.com/login/"); 

// im guessing these parameters need to be set but i dont why? 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = data.Length; 

// this opens a stream for writing the post variables. 
// im not sure what a stream class does. need to do some reading into this. 
Stream stream = request.GetRequestStream(); 

// you write the postData to the website and then close the connection? 
stream.Write(data, 0, data.Length); 
stream.Close(); 

// this receives the response after the log in 
WebResponse response = request.GetResponse(); 
stream = response.GetResponseStream(); 

// i guess you need a stream reader to read a stream? 
StreamReader sr = new StreamReader(stream); 

// this outputs the code to console and terminates the program 
Console.WriteLine(sr.ReadToEnd()); 
Console.ReadLine(); 
+0

Vous recherchez la documentation. – SLaks

Répondre

2

Un flux est une séquence d'octets. Pour utiliser du texte avec un flux, vous devez le convertir en une séquence d'octets.

Ceci peut être fait manuellement avec les classes de codage ou automatiquement avec StreamReader et StreamWriter. (Qui lecture et d'écriture des chaînes de flux)


Comme indiqué dans le documentation for GetRequestStream,

Vous devez appeler la méthode Stream.Close pour fermer le flux et libérer la connexion pour la réutilisation. Si vous ne fermez pas le flux, votre application est à court de connexions.


Les propriétés de la méthode et Content- * reflètent la HTTP protocol sous-jacente.

+0

Salut SLaks, savez-vous pourquoi le postData doit-il être dans un tableau d'octets? – super9

+0

@Nai: Les flux contiennent des octets, pas des chaînes. Vous ne pouvez pas envoyer directement une chaîne sur un réseau; vous devez l'encoder dans un tableau d'octets. – SLaks

+0

Vous pouvez également utiliser un StreamWriter à la place. – SLaks