ClientForm

말 그대로 html 상에 있는 form 을 처리할수 있는 분이다. 아래의 코드를 잠시 보자. 얼마나 간단한가? 이 코드가 할수 있는 일은 정말 막강하다.

ClientForm 을 다운 받은후  “파이썬 루트/Lib\site-packages/ ” 에 ClientForm.py 복사 하시라…

#!/usr/bin/python
# -*- coding: cp949 -*-
from urllib2 import urlopen
from ClientForm 
import ParseResponse
import sys
if len(sys.argv) is 1 :
        print >> sys.stderr , '분석할 URL 을 넣어주세요.'
        exit(1)
response = urlopen(sys.argv[1])
forms = ParseResponse(response)
form = forms[0]
print form

수행 시켜보면 안다.

수행 예 ))  >python form.py  http://www.naver.com/

결과 ))
<GET http://search.naver.com/search.naver application/x-www-form-urlencoded
<SelectControl(where=[*nexearch, web, site, webkr, kin, doc, cafeblog, post, article, dic, 100, endic, krdic, jpdic, hanja, image, video, music, news, local,book, shop, mypc])>
<TextControl(query=)>
<ImageControl(<None>=)>
<HiddenControl(frm=t1) (readonly)>
<HiddenControl(sm=top_hty) (readonly)>>

폼의 내용이 분석되어 지는것이 보이는지?? Get 이던 Post 이던 폼이 분석되는 것이다.

우선 뜯어 볼것은 특정 시스템에 로그인 하는것이다. 우선 id 와 패스워드를 입력하면 로그인 되도록 고쳐 보자.

그리고 그 결과를 찍어 보자 ^^

#!/usr/bin/python
# -*- coding: cp949 -*-
from urllib2 import urlopen
from ClientForm import ParseResponse
import sys
import urllib2

if len(sys.argv) is 1 :
        print >> sys.stderr , '분석할 URL 을 넣어주세요.'
        exit(1)

response = urlopen(sys.argv[1])
forms = ParseResponse(response)
response.close()
form = forms[0]
form['user_id'] = 'xxxxxxx'
form['password'] = 'xxxxxx'
request2 = form.click()
try:
        response2 = urllib2.urlopen(request2)
except urllib2.HTTPError , response2:
        pass
print response2.geturl()
print response2.info()   # 헤더정보
print response2.read()   # body
response2.close()

이 결과를 받아보면 헤더에 cookie 가 있어 이를 가지고 로그인을 한다는 것을 알수 있다.

그럼 쿠키 정보를 어떻게 처리해야 할까 ? ( HTTP 요청을 보낼때 마다 헤더와 함꼐 보내야 한다.. )

이것을 자동으로 처리해주는 모듈이 있으니  ClientCookie 가 되겠다.

헤더에서 주고 받는 쿠키가 자동으로 처리된다. 단지 urllib2.urlopen 대신에 ClientCookie.urlopen 으로 바꾸어

주기만 하면…..

#!/usr/bin/python
# -*- coding: cp949 -*-
from urllib2 import urlopen
from ClientForm import ParseResponse
import sysimport urllib2
import ClientCookie

if len(sys.argv) is 1 :
        print >> sys.stderr , '분석할 URL 을 넣어주세요.'
        exit(1)
request = urllib2.Request(sys.argv[1])
response = urlopen(request)
print response.info()   # 헤더정보
forms = ParseResponse(response)
response.close()
form = forms[0]
form['user_id'] = 'xxxxxx'
form['password'] = 'xxxxxx'
request2 = form.click()
try:
        response2 =  ClientCookie.urlopen(request2)
except urllib2.HTTPError , response2:
        pass
print response2.geturl()
print response2.info()   # 헤더정보
print response2.read()   # body
response2.close()
request3 = ClientCookie.Request(sys.argv[1])
response3 = ClientCookie.urlopen(request3)
print response3.info()   # 헤더정보
print response3.read()
response.close()

로그인 시점에 ClientCookie.Request  나 ClientCookie.urlopen 을 쓰면 ….

나도 모르게 자연스럽게 쿠키를 주고 받아서…. 로그인 이후의 접속 정보가 유지 되면서

많을 것들을 할수 있다.

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.