python์ผ๋ก Clien ๋ก๊ทธ์ธํ์ฌ ๊ธ๋จ๊ธฐ๊ธฐ
์ง๋ ๊ฐ์ข๋ฅผ ๋ณด์๊ณ ํ๋ถ์ด website์ ๋ก๊ทธ์ธํ ๊ธ์ ๋จ๊ธฐ๋ ๊ณผ์ ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ python๋ง์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์ ์๋์ง ์ชฝ์ง๋ฅผ ๋ณด๋ด์ฃผ์ ๋ถ์ด๊ณ์ ์ ๋ต์ฅ์ ํด๋๋ ธ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋ง๋ค๊ณ ์๋๊ฒ์ ์น๋ก๊ทธ์ธ์ด ํ์ํ์ฌ ๊ฒธ์ฌ๊ฒธ์ฌ ๊ฐ๋จํ๊ฒ ๊ฐ์ข๋ฅผ ์์ฑํด๋ด ๋๋ค.
Clien ๋ก๊ทธ์ธํ๊ธฐ
์ฐ์ ๋ก๊ทธ์ธ ์ ์ Cookie์ SSL์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
Cookie๋?
์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉ์ PC์ ๋ณด๊ดํ๊ธฐ ์ํด์ ์น ์ฌ์ดํธ์ ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ๋ ์ ๋ณด์ ๋๋ค. ์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด ์น ์ฌ์ดํธ๋ PC์ ์ ์ฅ๋ ์ฟ ํค์ ๋ด์ฉ์ ์ฝ๊ณ , ์ด์ฉ์์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ฐํธํ ๋งํด Cookie๋ ์ฌ์ฉ์์ ์ ๋ถ์ฆ๊ณผ ๊ฐ์๊ฒ์ผ๋ก ์๊ฐ ํ์๋ฉด ๋๊ฒ ์ต๋๋ค. Cookie์ ๋น์ทํ Session์ด๋๊ฒ๋ ์๋๋ฐ์ Session ์ ์ฌ์ฉ์์ PC์ ์ ์ฅ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ์ ์ ์ฅํฉ๋๋ค.
SSL์ด๋?
Secure socket layer์ ์ฝ์๋ก ์ ๋ณด๋ฅผ ์ํธํํ์ฌ ์ก/์์ ํ๋ ํ๋กํ ์ฝ์ ๋๋ค. ๊ฐ๋จํ ๋งํ๋ฉด SSL์ ์ ์ฉ์ ์ํ์๋๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ๋ ์๋ฒ๋ก ํจํท์ ์ ์กํ ๋ ์ฌ์ฉ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๊ฐ ๊ทธ๋๋ก ๋ ธ์ถ์ด ๋๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ ์ฉ์ ํ์์๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๊ฐ ์ํธํ ๋์ด ์ ์ก์ด ๋๊ธฐ์ ์ ์์ ์ธ ์ฌ์ฉ์๋ก๋ถํฐ ์ฌ์ฉ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๊ฐ ์กฐ๊ธ ๋ ์์ ํ๋ค๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
โป์ ๋ python 3.4๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
import http.cookiejar #Cookie๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค. import urllib import ssl #ssl์ ์ ์ฉํฉ๋๋ค. cj = http.cookiejar.CookieJar() #Cookie ์ ์ฉ https_sslv23_handler = urllib.request.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_SSLv23)) #python์ ssl protocol_SSLv23์ ์ ์ฉํ๊ธฐ ์ํ handler opener = urllib.request.build_opener(https_sslv23_handler,urllib.request.HTTPCookieProcessor(cj))#SSL๊ณผ Cookie๋ฅผ ์ฌ์ฉํ๋ opner๋ฅผ ๋ง๋ญ๋๋ค. opener.addheaders=[('User-agent','Mozilla/5.0'),('Accept-Language', 'ko-KR')] #Header์ ํ์ํ ๊ฒ๋ค์ ์ถ๊ฐ ์์ผ์ค๋๋ค. urllib.request.install_opener(opener)#urllib์ ์์ฑํด๋ opner๋ฅผ ๋ง๋ค์ด๋ก๋๋ค. login_url = "https://clien.net" #login์ ssl์ ์ด์ฉํ๊ธฐ์ https๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์๋ฅผ ์ ์ด๋์์ต๋๋ค. url = "http://clien.net" #login์ ์ ์ธํ ๋ฐ์ดํฐ๋ http๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํฉ๋๋ค. login_info = { 'mb_id' : "Clien ID",#clien id๋ฅผ ์ ์ต๋๋ค. 'mb_password' : "Clien Password"#password๋ฅผ ์ ์ต๋๋ค. } login_request = urllib.parse.urlencode(login_info) req = urllib.request.Request(login_url+'/cs2/bbs/login_check.php',login_request.encode('UTF-8')) res = urllib.request.urlopen(req)
๋ค์์ python์ ssl ํ๋กํ ์ฝ์ ๋๋ค. ์ ๋ SSLv23์ ์ ์ฉ์์ผ๋์๋๋ฐ์ ๋ค๋ฅธ์๋ฏธ๋ ์๊ณ SSLv23์ด ์๋ฒ์ SSLv2๋ฅผ ์ ์ธํ ๋จ๋จธ์ง๋ฅผ ๋ค ์ง์ํด์ฃผ๊ธฐ์ SSLv23์ ์ ์ฉํ์์ต๋๋ค.
login_info์ mb_id๋ ํํ์ด์ง์ ์์ด๋์ ๋ ฅํ๋ text์ฐฝ์ id์ด๋ฉฐ mb_password๋ ํจ์ค์๋๋ฅผ ์ ๋ ฅํ๋ ๊ณณ์ text์ฐฝ์ ๋๋ค. ์ ๊ณณ์ ํ์ธ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ BeautifulSoup์ ์ด์ฉํ ๋ ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐพ์ผ์๋ฉด ๋ฉ๋๋ค.
login_request๋ login_info๋ฅผ ๋ฐํ์ผ๋ก Request๋ฅผ ๋ ๋ฆด์์๊ฒ ๋ณํํ์ฌ ์ฃผ๋ ๊ณผ์ ์ ๋๋ค.
์ด์ ํจํท์ ๋ ๋ฆฌ๊ธฐ ์ํ ์ค๋น๊ฐ ๋ค ๋์ด๋ฌ์ต๋๋ค. ullib.request.Request()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Request๋ฅผ ์์ฑํ๊ณ urlopen์ ํตํ์ฌ Request๋ฅผ ์ ์กํ๋ฉด ๋ก๊ทธ์ธ์ด ๋๋๊ฒ ๋ฉ๋๋ค.
Clien์ ๊ธ์ฌ๋ฆฌ๊ธฐ
๋ชจ๋์ ๊ณต์๊ณผ ์์ดํฌ๋์์ ๋ํด์ ํจํท์ ํ์ธ ํด๋ณด์๋๋
#๋ชจ๋์ ๊ณต์ Content-Disposition: form-data; name="bo_table"(๊ฒ์ํ ์ด๋ฆ) park Content-Disposition: form-data; name="wr_subject"(์ ๋ชฉ) python์ผ๋ก ๋ชจ๋์ ๊ณต์ ๊ธ์ฐ๊ธฐ test์ ๋๋ค. Content-Disposition: form-data; name="wr_content"(๋ด์ฉ) ํ ์คํธํ ์ ๋ฆฌํ์ฌ ํ๊ณผ๊ฐ์ข์ ๊ธ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.\n๊ธ์ ๊ณง ์ญ์ ๋ฉ๋๋ค.\nyangbeom Content-Disposition: form-data; name="wr_ccl_nc"(ccl์๋ฆฌ๋ชฉ์ ) nc Content-Disposition: form-data; name="wr_ccl_nd"(ccl ๋ณ๊ฒฝ) nd #์์ดํฌ๋์ Content-Disposition: form-data; name="bo_table"(๊ฒ์ํ์ด๋ฆ) cm_iphonien Content-Disposition: form-data; name="ca_name"(์นดํ ๊ณ ๋ฆฌ) [์ก๋ด] Content-Disposition: form-data; name="wr_subject" python์ผ๋ก ์์ดํฌ๋์์ ๊ธ์ฐ๊ธฐ test์ ๋๋ค. Content-Disposition: form-data; name="wr_content" ํ ์คํธ ํ ์ ๋ฆฌํ์ฌ ํ๊ณผ ๊ฐ์ข์ ๊ธ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.\n ๊ธ์ ๊ณง ์ญ์ ๋ฉ๋๋ค.\n yangbeom
์ ๊ฐ์ด ์ ์ก์ ํด์ฃผ๋ฉด ์ฌ๋ผ๊ฐ๊ฒ ๋์ด์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ์ ํด์ฃผ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒ์ํ์ ๊ฒฝ์ฐ bo_table์ ๋ณ๊ฒฝํด์ฃผ์๋ฉด ์ ์ก์ด ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
write_info = {} write_info[0] = { 'bo_table':'park', 'wr_subject':"python์ผ๋ก ๋ชจ๋์ ๊ณต์ ๊ธ์ฐ๊ธฐ test์ ๋๋ค.", 'wr_content':"ํ ์คํธ ํ ์ ๋ฆฌํ์ฌ ํ๊ณผ ๊ฐ์ข์ ๊ธ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.\n ๊ธ์ ๊ณง ์ญ์ ๋ฉ๋๋ค.\n yangbeom", 'wr_ccl_nc':"nc", 'wr_ccl_nd':"nd" } write_info[1] = { 'bo_table':"cm_iphonien", 'ca_name':"[์ก๋ด]", 'wr_subject':"python์ผ๋ก ์์ดํฌ๋์์ ๊ธ์ฐ๊ธฐ test์ ๋๋ค.", 'wr_content':"ํ ์คํธ ํ ์ ๋ฆฌํ์ฌ ํ๊ณผ ๊ฐ์ข์ ๊ธ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค.\n ๊ธ์ ๊ณง ์ญ์ ๋ฉ๋๋ค.\n yangbeom" }
์์ ๋ก๊ทธ์ธ๊ณผ ๋ค๋ฅธ์ ์ Request๋ฅผ ๋ณด๋ด์ผํ ๊ณณ์ด /cs2/bbs/login_check.php์ด ์๋ /cs2/bbs/write_update.php ์ด๋๊ฒ์ ๋๋ค.
๊ฐ์ข๋ฅผ ์ํด for๋ฌธ์ ์ด์ฉํ์ฌ ๋ชจ๋์ ๊ณต์๊ฐ ์์ดํฌ๋์์ ๊ธ์ ์ฌ๋ ค๋ณด๋๋กํ๊ฒ ์ต๋๋ค.
for i in range(0,2): write_request = urllib.parse.urlencode(write_info[i]) req = urllib.request.Request(url+"/cs2/bbs/write_update.php",write_request.encode('UTF-8')) res = urllib.request.urlopen(req)
์คํ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์งง์ ์๊ฐ๋ด์ request๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค๋ฉด ๋ชจ๋ ๊ธ์ด ์ฌ๋ผ๊ฐ์ง ์์์ ์์ต๋๋ค.

















