-
[ 파이썬 ] requests 모듈을 통한 자동화 글쓰기코딩 2018. 6. 22. 11:14파이썬의 requests 모듈을 통해서 한번 자동화 글쓰기를 해보도록 하자사실 엄청나게 간단한 원리인데보내는 패킷 값을 파이썬으로 고대로 조립해서 보내주면 된다 .그 부분을 쉽게 해주는 모듈이 바로 requests 모듈이라 할 수 있다이 모듈을 통하여 쿠키 값을 통하여 웹을 돌아다니며 크롤을 할수도 있고여러가지 할수 있는 것이 많다나는 게시글을 작성하기 위해 작성시 패킷을 Fidder로 따보았다wireshark 든 burp suite든 타 프로그램을 이용해도 전혀 상관없다,
POST http://-/m_board_ok.php HTTP/1.1 Host: 임의로 가림 Connection: keep-alive Content-Length: 1647 Cache-Control: max-age=0 Origin:- Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryd3hs7NQaTxbQfYFg User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Referer: - Accept-Encoding: gzip, deflate Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7 Cookie: PHPSESSID=2caa4687980046061c0a498d8f541c81 ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_mode" write ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_db" data_board ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_line" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_choi" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_divi" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_sele" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_ques" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="ps_page" 1 ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_name" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_email" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_homepage" ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_subject" user ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_body" user ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="board_file1"; filename="" Content-Type: application/octet-stream ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="x" 6 ------WebKitFormBoundaryd3hs7NQaTxbQfYFg Content-Disposition: form-data; name="y" 22 ------WebKitFormBoundaryd3hs7NQaTxbQfYFg--
캡쳐한 패킷 내용은 다음과 같았다 .
이 패킷데이터 내용을
파이썬 으로 조립을 해야하는데 간단하게 가능하다
저 밑에 있는 부분 webkit~ 으로 시작하는 것이
multipart/form-data content-type
으로 보낸 body 부분이다
content-Type에 multiparat/form-data로 지정이 되있고
boundary에 지정되있는 문자열은 파일데이터의 구분자로 활용하게 된다
마지막문자열은 마지막에 -- 가 붙은것으로 body의 끝을 알려주게 되는것!
이러한 것들은 http 통신 규격이다.
우리가 할것은 역시 이 규격때로 짜맞추는것..!
저부분을 조립하는 게 제일 큰 시간이 들것 같으나 .
하지만 쉽게 가능하다 .
저 부분을 아주 쉽고 빠르게 해주는 것이 MultipartEncoder 라는 툴이다 .
MultipartEncoder ( fields = {})
안에 값들을 바운더리로 구분되있는 값들을 하나 하나 입력해준다
name 부분을 키 값으로 그리고 그 밑에 있는값을 value 값을 지정해주자 .
url 은 post 해줄때 처럼 data 에 값을 넣어주면 된다.
밑에 인코딩을 euc-kr로 해준것은 내가 utf-8 로 인코딩을 한 문자열을 서버에서
인식하는데 이 문자열을 서버에서는 euc-kr로 디코딩을하기 때문에 외계어가 글자가 인식이 되서 euc-kr로 인코딩을 해서 보낸 것이다.
def write_Down_To_CoreMall(self): url = '-' data1 = "안녕하세요"
data1 =data1.encode('EUC-KR') content = "자동 글쓰기" content = content.encode('EUC-KR') m= MultipartEncoder( fields = { 'ps_mode':'write', 'ps_db':'data_board', 'ps_line':'', 'ps_choi':'', 'ps_divi':'', 'ps_sele':'', 'ps_ques':'', 'ps_page':'1', 'board_name':data1, 'board_email':'-@naver.com', 'board_homepage':'hello', 'use_html' : '1', 'board_subject':content, 'board_body':'', 'board_file1': ('','','application/octet-stream'), 'x':'32', 'y':'32'}) headers = { 'Host': '-', 'Connection':'keep-alive', 'Content-Length':'64', 'Content-Type': m.content_type, 'Cache-Control':'max-age=0', 'Origin':'-', 'Upgrade-Insecure-Requests': '1', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Encoding':'gzip, deflate', 'Accept-Language':'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7' } r = requests.post( url, data=m, headers=headers, cookies = self.cookies_dict) print(r)
이것을 전송하면
이런식으로 가능해진다
'코딩' 카테고리의 다른 글
[ 백준 ][ 자바 ][ 14502 ] 연구소 (1) 2019.06.23 [ 백준 ][ 자바 ][ 1759 ] 암호만들기 retry (0) 2019.06.15 [백준][파이썬] 2839 설탕배달 (0) 2018.05.02 [파이썬] 로또 프로그램 (0) 2018.04.27 [파이썬]pipinstaller (0) 2018.04.27