2010-12-29 4 views
1

Dies ist ein Mini-Projekt, das ich im Rahmen eines "Teach-it-to-Code-Marathons" beauftragt habe. Ich braucheWie muss ich lesen/wissen, um sich bei einer Site anzumelden und eine Aktion auszuführen?

  1. Melden Sie sich bei einer Website, die einen Benutzer/Pass (z. B. Facebook) erfordert und die Antwort zurück. Das habe ich mit den Klassen WebRequest und WebResponse erreicht.
  2. Der nächste Schritt ist es, eine Nachricht zu meinem Tutor

Dies ist, wo ich programmatisch bin ratlos zu senden. Wie kann ich auf die Funktion "Nachricht senden" der Site zugreifen? Ich stelle mir vor, ich muss zuerst nach den Abfrageparametern suchen, was ich tun kann, indem ich Firebug benutze, aber ich bin verwirrt, wie kann ich meinen "eingeloggten Status" beibehalten und die Nachricht senden? Ich habe ein bisschen gesucht und denke, dass es Cookies gibt, aber ich bin mir nicht sicher, wie es weitergehen soll.

Danke.

Antwort

1

Wenn Sie sich anmelden, enthält die Response ein oder mehrere Cookies, die Sie bei weiteren Anforderungen an den Server senden müssen.

3

Sie benötigen die CookieCollection; Nach Erhalt der Antwort von Ihrer Login-Anfrage können Sie die Cookies aus der Antwort lesen.

 var cookies = new CookieContainer(); 
     ServicePointManager.Expect100Continue = false; 
     CookieCollection receivedCookies = new CookieCollection(); 

     try 
     { 
      var request = (HttpWebRequest) WebRequest.Create(ServerUrl + "index.php"); 
      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.CookieContainer = cookies; 

      string postData = "try=&username=someLogin&password=somepass"; 
      byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
      request.ContentLength = byteArray.Length; 

      using (Stream dataStream = request.GetRequestStream()) 
      { 
       dataStream.Write(byteArray, 0, byteArray.Length); 
      } 

      // Get the response. 
      using (WebResponse response = request.GetResponse()) 
      { 
       receivedCookies = ((HttpWebResponse) response).Cookies; 
       Logger.DebugFormat("received {0} cookies", receivedCookies.Count); 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        using (StreamReader reader = new StreamReader(responseStream)) 
        { 
         string responseFromServer = reader.ReadToEnd(); 
         Logger.DebugFormat("response from server after login-post: {0}", responseFromServer); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.FatalFormat("there was an exception during login: {0}", ex.Message); 
      return (int) CreateResult.GenericError; 
     } 

während Subanfrage müssen Sie immer das Cookie (e):

  var request = 
       (HttpWebRequest)WebRequest.Create(ServerUrl + "index.php?nav=callcenter&sub=ccagents&action=new"); 
      request.Method = "POST"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.CookieContainer = cookies; 
      request.CookieContainer.Add(receivedCookies); 
+0

ich ziemlich sicher bin, dass Sie dies nicht tun müssen empfangene Cookies manuell hinzufügen. – SLaks

Verwandte Themen