ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 파이썬 ] 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-typ

    으로 보낸 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

    댓글

Designed by Tistory.