C# 웹 로그인 + 마이페이지 크롤링(HttpWebRequest, HttpWebResponse)
마스터욱
0
92
0
0
2018-11-29 14:44:03
특정 웹페이지 로그인후, 마이페이지의 내용을 긁어오는 소스코드입니다.
순서는 아래와 같습니다.
1. 웹 로그인 Action 페이지로 아이디/패스워드 값 POST로 전송
2. 아이디/패스워드 일치하면 로그인 쿠키/세션 취득
3. 획득한 쿠키/세션으로 마이페이지 크롤링
더 나아가면 게시판 글쓰기나 댓글쓰기도 가능하겠죵~ 헤헤
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace WebControl
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- public static CookieContainer cookie = new CookieContainer();
- //페이지 로그인 하면서 쿠키를 받아롬
- public HttpWebResponse mainLogin()
- {
- //REQUEST 설정
- HttpWebRequest req = (HttpWebRequest)WebRequest.Create("로그인URL");
- req.Method = "Post";
- req.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2";
- string s = "mb_id=로그인아이디&mb_password=로그인패스워드"; //input테그 목록을 참조해서 바꿈
- req.CookieContainer = cookie; //삽질한 부분 - 쿠키 컨테이너는 static 으로 공유되어야함
- req.ContentLength = s.Length;
- req.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
- //req.ContentType = "text/plain";
- //req.ContentType = "application/xml, text/xml, */*; q=0.01";
- req.KeepAlive = true;
- //POST값 전송
- TextWriter w = (TextWriter)new System.IO.StreamWriter(req.GetRequestStream());
- w.Write(s);
- w.Close();
- //사이트 긁어오기
- HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
- TextReader r = (TextReader)new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
- //Console.WriteLine(r.ReadToEnd());
- //Console.WriteLine("로그인 성공");
- return resp;
- }
- public string loginImageURL(HttpWebResponse resp)
- {
- //TextReader rr = (TextReader)new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
- //Console.WriteLine("rr = " + rr.ReadToEnd());
- //HttpWebResponse respBuffer = resp;
- //respBuffer = resp;
- Console.WriteLine("페이지 로드중");
- //로그인 (사용자 인증 후에 할 일)
- HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://repoint.kr/bbs/mypage.php");
- //req.UserAgent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2";
- //req.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
- //Console.WriteLine("resp.Cookies = " + resp.Cookies);
- //세션 쿠키 유지
- req.CookieContainer = cookie; //삽질한 부분 - 쿠키 컨테이너는 static 으로 공유되어야함
- req.CookieContainer.Add(resp.Cookies);
- //사이트 긁어오기
- resp = (HttpWebResponse)req.GetResponse();
- TextReader r = (TextReader)new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
- Console.WriteLine(r.ReadToEnd());
- string htmlBuffer = r.ReadToEnd();
- return htmlBuffer;
- }
- public void saveFile(string r)
- {
- resultbox.Text = r;
- //파일 저장 하는 구간
- try
- {
- //Pass the filepath and filename to the StreamWriter Constructor
- StreamWriter sw = new StreamWriter("C:\\Test.txt");
- //Write a line of text
- sw.WriteLine(r);
- //Close the file
- sw.Close();
- }
- catch (Exception e)
- {
- //Console.WriteLine("Exception: " + e.Message);
- }
- finally
- {
- //Console.WriteLine("Executing finally block.");
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- HttpWebResponse req = mainLogin();
- string content = loginImageURL(req);
- saveFile(content);
- }
- }
- }