2010-12-29 9 views
0

Ich fand dieses Code-Snippet here, mit dem Sie sich auf einer Website anmelden und die Antwort von der angemeldeten Seite erhalten können. Ich habe jedoch Probleme, den gesamten Code zu verstehen. Ich habe mein Bestes versucht, um alles zu ergänzen, was ich bisher verstanden habe. Ich hoffe, ihr könnt die Lücken für mich füllen. DankeUnderstanding 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

Sie suchen nach der Dokumentation. – SLaks

Antwort

2

Ein Stream ist eine Sequenz von Bytes.

Um Text mit einem Stream zu verwenden, müssen Sie ihn in eine Bytefolge konvertieren.

Dies kann manuell mit den Encoding-Klassen oder automatisch mit StreamReader und StreamWriter erfolgen. (Das Lesen und Schreiben von Strings Streams)


Wie in der documentation for GetRequestStream angegeben,

Sie müssen die Stream.Close Methode aufrufen, um den Strom zu schließen und lassen Sie die Verbindung zur Wiederverwendung. Wenn der Stream nicht geschlossen wird, sind in Ihrer Anwendung keine Verbindungen mehr vorhanden.


Das Verfahren und Inhalt- * Eigenschaften spiegeln die zugrunde liegenden HTTP protocol.

+0

Hallo SLaks, weißt du, warum die postData in einem Byte-Array sein muss? – super9

+0

@Nai: Streams enthalten Bytes, keine Strings. Sie können eine Zeichenfolge nicht direkt über ein Netzwerk senden. Sie müssen es in ein Byte-Array codieren. – SLaks

+0

Sie können stattdessen auch einen StreamWriter verwenden. – SLaks