Announcement

Collapse
No announcement yet.

Facebook-Login

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Facebook-Login

    Moin moin,

    mein Anliegen ist es, entsprechende Webseiten aus dem Facebook-Netzwerk als .html-Datei zu speichern. Hierfür habe ich mehrere Methoden:

    - Cookie setzen
    [highlight=c#] private static CookieCollection GetCookie()
    {
    CookieCollection cookies = new CookieCollection();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.facebook.com");
    request.CookieContainer = new CookieContainer();
    request.CookieContainer.Add(cookies);
    //Get the response from the server and save the cookies from the first request..
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    return cookies = response.Cookies;
    }[/highlight]

    - Einloggen
    [highlight=c#] private static void postLoginData(CookieCollection cookies)
    {
    string email = Console.ReadLine();
    string pass = Console.ReadLine();
    string getUrl = "https://www.facebook.com/login.php?login_attempt=1";
    string postData = String.Format("email={0}&pass={1}", email, pass);
    HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
    getRequest.CookieContainer = new CookieContainer();
    getRequest.CookieContainer.Add(cookies); //recover cookies First request
    getRequest.Method = WebRequestMethods.Http.Post;
    getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
    getRequest.AllowWriteStreamBuffering = true;
    getRequest.ProtocolVersion = HttpVersion.Version11;
    getRequest.AllowAutoRedirect = true;
    getRequest.ContentType = "application/x-www-form-urlencoded";

    byte[] byteArray = Encoding.ASCII.GetBytes(postData);
    getRequest.ContentLength = byteArray.Length;
    Stream newStream = getRequest.GetRequestStream(); //open connection
    newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
    newStream.Close();

    HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
    using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
    {
    string sourceCode = sr.ReadToEnd();
    }
    }[/highlight]

    - URL aufrufen und speichern
    [highlight=c#] private static void GetWebText()
    {
    string url = Console.ReadLine();
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);
    string htmlText = reader.ReadToEnd();
    File.WriteAllText(@"C:\Users\Jay\Desktop\info2.txt ",htmlText);
    Console.WriteLine("Erfolgreich gespeichert");
    }[/highlight]


    Wenn ich die drei Methoden nun aufrufe und die Datei speichere, denn speichert er die Seite als "nicht eingeloggt", also so, wie sie von außen zu sehen ist. Von außen (ausgeloggt), kann ich aber nicht auf die von mir gefragten Informationen gelangen.

    Weiß jemand, wo mein Denkfehler liegt bzw. wieso diese Vorgehensweise falsch ist?

    Mit freundlichem Gruß

  • #2
    Kann nicht erkennen, wo du dich einloggst. Es muessen keine Formularfelder ausgefuellt werden?
    Christian

    Comment


    • #3
      Ich weiß ja nicht was Du vor hast, allerdings bin ich mir ziemlich sicher dass Facebook auch eine API hat mit der man wesentlich besser an Daten heran kommt als über Webseiten grabben. Schau mal hier:
      https://developers.facebook.com/

      Ausser Du willst natürlich unbedingt explizit Webseiten grabben

      @Christian: In dem Einloggen Beispiel setzt er doch im Request Body die Post Data:

      [highlight=c#]
      string postData = String.Format("email={0}&pass={1}", email, pass);
      [/highlight]

      Comment

      Working...
      X