2009-05-23 14 views
7

Czy byłoby możliwe napisanie skrobaka do ekranu chronionego przez formularz logowania. Mam dostęp do strony, oczywiście, ale nie mam pojęcia, jak zalogować się do serwisu i zapisać moje poświadczenia w języku C#.Screen-scraping strona z formularzem asp.net zaloguj się w C#?

Również, wszelkie dobre przykłady screencraperów w C# byłyby ogromnie docenione.

Czy to już zostało zrobione?

Odpowiedz

6

to całkiem proste. trzeba metodę niestandardowego logowania (HttpPost).

można wymyślić coś takiego (w ten sposób dostanie wszystkie potrzebne pliki cookie po zalogowaniu i potrzebujesz tylko przekazać je do następnego HttpWebRequest):

public static HttpWebResponse HttpPost(String url, String referer, String userAgent, ref CookieCollection cookies, String postData, out WebHeaderCollection headers, WebProxy proxy) 
    { 
     try 
     { 
      HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest; 
      http.Proxy = proxy; 
      http.AllowAutoRedirect = true; 
      http.Method = "POST"; 
      http.ContentType = "application/x-www-form-urlencoded"; 
      http.UserAgent = userAgent; 
      http.CookieContainer = new CookieContainer(); 
      http.CookieContainer.Add(cookies); 
      http.Referer = referer; 
      byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData); 
      http.ContentLength = dataBytes.Length; 
      using (Stream postStream = http.GetRequestStream()) 
      { 
       postStream.Write(dataBytes, 0, dataBytes.Length); 
      } 
      HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse; 
      headers = http.Headers; 
      cookies.Add(httpResponse.Cookies); 

      return httpResponse; 
     } 
     catch { } 
     headers = null; 

     return null; 
    } 
+0

Wskazówka: Nawet jeśli nie chcesz odpowiedzi z POST, ważne jest, aby je zjeść, aby transfer danych został przepłukany, a połączenie zostanie zamknięte, np. {Http.GetResponse(); } – kgriffs

4

Oczywiście, zostało to zrobione. Zrobiłem to kilka razy. Jest to (ogólnie) o nazwie Screen-scraping lub Web Scraping.

Powinieneś rzucić okiem na this question (a także przejrzeć pytania pod znacznikiem "screen-scraping". Pamiętaj, że Skrobanie nie odnosi się tylko do ekstrakcji danych z zasobu internetowego, ale obejmuje również przesyłanie danych do formularzy online, tak aby naśladować działania użytkownika przy składaniu wejściowe takie jak formularz logowania.