2011-10-12 3 views
3

사용자 이름과 암호를 사용하여 간단한 폼 인증을 사용하는 사이트에서 내용을 긁어 내려고했지만 "호일"이라고하는 숨겨진 필드가 있습니다. 페이지가로드 될 때마다 임의로 생성 된 문자열입니다. 해당 값을 성공적으로 로그인하려면 게시물의 콘텐츠 헤더에 포함되어야합니다. 로그인 페이지가로드 된 후에 임의의 문자열을 긁어 내려고했지만 여전히 로그인으로 다시 리디렉션했습니다. 작동하는 사이트의 유효한 사용자 이름과 암호가 있지만 산발적으로 업데이트되며 변경 될 때 전자 메일을 보내고 싶습니다. 여기에 지금까지 작업했던 코드 ...Python 백신 방지를 사용하여 양식 게시

import urllib, urllib2, cookielib,subprocess 

url='https://example.com/login.asp' 

username='blah' 
password='blah' 

request = urllib2.Request(url) 
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)) 
preData = opener.open(request).readlines() 
for line in preData: 
    if("foil" in line): 
     foils = line.split('"') 
     notFoiled = foils[3] 

query_args={'location':'','qstring':'','absr_ID':notFoiled,'id':username,'pin':password,'submit':'Sign In'} 
requestWheader = urllib2.Request('https://example.com/login.asp') 
requestWheader.add_data(urllib.urlencode(query_args)) 
print 'Request method after data :', requestWheader.get_method() 

print 
print 'OUTGOING DATA:' 
print requestWheader.get_data() 

print 
print 'SERVER RESPONSE:' 
print urllib2.urlopen(requestWheader).read() 
rawRes = urllib2.urlopen(requestWheader).read() 

양식은 다음과 같습니다 ...

<form name="loginform" method="post" action="https://example.com/login.asp?x=x&amp;&amp;pswd="> 
<input type=hidden name="location" value=""> 
<input type=hidden name="qstring" value=""> 
<input type=hidden name="absr_ID" value=""> 
<input type=hidden name="foil" value="91fcMO"> 
<input type="text" name="id" maxlength="80" size="21" value="" mask="" desc="ID" required="true"> 
<input type="submit" name="submit" value="Sign In" onClick="return checkForm(loginform)"> 
<input type="password" name="pin" size="6" maxlength="6" desc="Pin" required="true"> 
+0

왜 쿼리 문자열을 전달하지 않습니까? –

+0

requestWheader.add_data (urllib.urlencode (query_args)) ->이 쿼리 문자열을 전달하지 않습니까? – adam0101

+0

음, 아니. 쿼리 문자열은 URL의 일부입니다. –

답변

2

당신은 cookielib 가져하지만 당신이 사용하고있는 것처럼하지 않는 것입니다 어떤 CookieJar의 :

jar = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar)) 

그런 다음 모두 초기 형태의 인출 및 로그인 양식 제출에 대해 동일한 오프너를 사용합니다. foil 필드의 값이 헤더에있는 쿠키와 일치해야하는 쿠키 기반 보호라고 가정합니다.

내가 코드에서 알아 차린 또 다른 사항은 대신 notFoiledabsr_ID에 할당한다는 것입니다. 그게 의도적 인거야?

또한 직접 HTML 구문을 분석하는 대신 html5lib 또는 BeautifulSoup을 사용하십시오.