- Use cookies in the request
- Use tools(webscarab) to get the request URL/data in the Flash
- Parse the HTML/XML
Here is the update Proxy.py(base on the proxyHTTP.py in the last post) to build proxy under Jython:
from java.net import Authenticator
from java.net import PasswordAuthentication
from java.lang import System
from java.net import URL
from urllib2 import ProxyHandler, build_opener, HTTPCookieProcessor
proxy_info = {
'user' : '*domain*\\*user*',
'pass' : '*password*',
'host' : '***',
'port' : '***'
}
class auth(Authenticator):
def getPasswordAuthentication(self):
return PasswordAuthentication(proxy_info['user'], proxy_info['pass'])
def getHTTPS(url):
systemSettings = System.getProperties()
systemSettings.put("https.proxyHost", proxy_info['host'])
systemSettings.put("https.proxyPort", proxy_info['port'])
Authenticator.setDefault(auth())
u = URL(url)
d = u.openConnection().getInputStream()
c = d.read()
r = []
while c <> -1:
r.append(chr(c))
c = d.read()
return ''.join(r)
def HTTPProxyHandler():
return ProxyHandler({'http' : \
'http://%(user)s:%(pass)s@%(host)s:%(port)s' % proxy_info})
def getOpener(cj):
# cj - use cookie or not
proxy = HTTPProxyHandler()
if cj:
opener = build_opener(proxy,
HTTPCookieProcessor())
else:
opener = build_opener(proxy)
return opener
def main():
urlpath = r'https://www.google.com/reader'
print getHTTPS(urlpath)
if __name__ == '__main__':
main()
And this is the main script:
import Proxy
import urllib2
#import cookielib
import re
from urllib import urlencode
from xml.dom import minidom
from time import sleep
from random import random
urlparm = {
'garden': '/!house/!garden//getconf.php',
'water': '/!house/!garden/water.php',
'antigrass': '/!house/!garden/antigrass.php',
'antivermin': '/!house/!garden/antivermin.php',
'havest': '/!house/!garden/havest.php',
'plough': '/!house/!garden/plough.php',
'ranch': '/!house/!ranch//getconf.php',
'r_havest': '/!house/!ranch/havest.php'
}
xmlparm = '%s '
class kx:
def __init__(self):
self.buildProxy()
self.url = 'http://www.kaixin001.com'
self.DELAY = 3 #3 sec
def buildProxy(self):
# build a new opener that uses cookies
#proxy_support = Proxy.HTTPProxyHandler()
#opener = urllib2.build_opener(proxy_support,
# urllib2.HTTPCookieProcessor())
#opener.addheaders = [('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')]
opener = Proxy.getOpener(True)
# install it
urllib2.install_opener(opener)
def login(self, usr, pwd):
path = self.url + '/login/login.php'
body = {
'url': '/home/',
'email': usr,
'password': pwd
}
req = urllib2.Request(path, urlencode(body))
#response = urllib2.urlopen(req).read()
#print response
urllib2.urlopen(req)
def getpage(self, path, data={}):
#Delay
#sleep(self.DELAY+random()+random())
req = urllib2.Request(self.url+path, urlencode(data))
return urllib2.urlopen(req).read()
def get_friend_info(str1, friend_info):
pattern = '\?uid\=(\d{6,8})\"\stitle\=\"([^\"]+)\"'
for match in re.finditer(pattern, str1):
friend_info[match.group(1)] = unicode(match.group(2),'utf-8')
def get_verify(str1):
pattern = 'g_verify\s=\s\"([^\"]+)\"'
return re.findall(pattern, str1)[0]
def showMsg(fuid, t):
if fuid=='0':
print '%s: %s' % (t, 'My')
else:
print ' %s: %s' % (t, fuid)
def pxml(t, c):
try:
xmldoc = minidom.parseString(xmlparm % c)
except:
print '! xml parse failed.'
return
if xmldoc.getElementsByTagName('ret')[0].firstChild.data == 'fail':
print ' %s: %s' % (t, xmldoc.getElementsByTagName('reason')[0].firstChild.data)
else:
print ' %s: %s' % (t, 'succ')
def showFriend(o, v):
c = o.getpage('/friend/')
i = {}
get_friend_info(c, i)
for k in i:
if k in ['*ignore list*']: continue
#print k, i[k]
showGarden(o, v, k)
showRanch(o, v, k)
#print '-'*20
#print 'Total %d friends' % len(i)
def showGarden(o, v, fuid):
pars = {
'fuid': fuid,
'verify': v
}
c = o.getpage( urlparm['garden'], pars )
try:
xmldoc = minidom.parseString(xmlparm % c)
except:
print '! Failed to parse %s xml file.' % fuid
return
showMsg(fuid, 'Garden')
for nodes in xmldoc.getElementsByTagName('garden'):
for node in nodes.getElementsByTagName('item'):
if node.getElementsByTagName('name'):
farmnum = node.getElementsByTagName('farmnum')[0].firstChild.data
water = node.getElementsByTagName('water')[0].firstChild.data
grass = node.getElementsByTagName('grass')[0].firstChild.data
vermin = node.getElementsByTagName('vermin')[0].firstChild.data
cropsstatus = node.getElementsByTagName('cropsstatus')[0].firstChild.data
shared = node.getElementsByTagName('shared')[0].firstChild.data
grow = node.getElementsByTagName('grow')[0].firstChild.data
totalgrow = node.getElementsByTagName('totalgrow')[0].firstChild.data
pars = {
'fuid': fuid,
'farmnum': farmnum,
'seedid': 0,
'verify': v,
'r': random()
}
#print node.getElementsByTagName('name')[0].firstChild.data
if int(water) < 5:
pxml( 'Water', o.getpage( urlparm['water'], pars ) )
elif grass == 1:
pxml( 'Grass', o.getpage( urlparm['antigrass'], pars ) )
elif vermin == '1':
pxml( 'Vermin', o.getpage( urlparm['antivermin'], pars ) )
# me
elif fuid == '0' and grow <> '' and grow == totalgrow and \
( cropsstatus == '1' or cropsstatus == '2' ):
pxml( 'Havest', o.getpage( urlparm['havest'], pars ) )
if shared == '0':
pxml( 'Plough', o.getpage( urlparm['plough'], pars ) )
# others
elif fuid <> '0':
# plough the shared item only
if cropsstatus == '3' and shared == '1':
pxml( 'Plough', o.getpage( urlparm['plough'], pars ) )
# steal
elif cropsstatus == '2' and shared == '0':
bsteal = True
for nc in node.getElementsByTagName('crops')[0].childNodes:
if nc.data.find('font ') <> -1:
bsteal = False
break
if bsteal:
pxml( 'Steal', o.getpage( urlparm['havest'], pars ) )
def showRanch(o, v, fuid):
pars = {
'fuid': fuid,
'verify': v
}
c = o.getpage( urlparm['ranch'], pars )
try:
xmldoc = minidom.parseString(xmlparm % c)
except:
print '! Failed to parse %s xml file.' % fuid
return
showMsg(fuid, 'Ranch')
for nodes in xmldoc.getElementsByTagName('product2'):
for node in nodes.getElementsByTagName('item'):
skey = node.getElementsByTagName('skey')[0].firstChild.data
typenum = node.getElementsByTagName('type')[0].firstChild.data
pars = {
'skey': skey,
'fuid': fuid,
'foodnum': 1,
'type': typenum,
'seedid': 0,
'verify': v,
'r': random()
}
bsteal = True
if fuid == '0':
pxml( 'Havest %s' % skey, o.getpage( urlparm['r_havest'], pars ) )
else:
for nc in node.getElementsByTagName('tips')[0].childNodes:
if nc.data.find('font ') <> -1:
bsteal = False
break
if bsteal:
pxml( 'Steal %s' % skey, o.getpage( urlparm['r_havest'], pars ) )
def main():
usr = [
('*email*','*password*')
]
for u,p in usr:
print '-'*18, u, '-'*20
o = kx()
o.login(u,p)
c = o.getpage('/!house/garden/index.php')
v = get_verify(c)
showGarden(o, v, '0')
showRanch(o, v, '0')
#print '-'*18, 'Friends', '-'*20
showFriend(o, v)
if __name__ == '__main__':
main()