Код:
import re
import urllib
import httplib
import os
import argparse
import xml.etree.ElementTree as Xml
from urlparse import urlparse
def request(url, param="", headers={}, method="GET"):
if type(param) is dict:
param = urllib.urlencode(param)
uri = urlparse(url)
conn = httplib.HTTPConnection(uri.netloc)
conn.request(method, uri.path, param, headers)
return conn.getresponse(), conn
def getCookies(responce):
result = {}
cookies = responce.getheader('set-cookie')
if not cookies: # cookies not found
return result
temp = re.split(",(?= \w+[\w\d]*=)", cookies)
for cookie in temp:
slices = re.split('=|; ', cookie)
result.update({slices[0]: slices[1]})
return result
def parseArgs():
parser = argparse.ArgumentParser()
parser.add_argument("login", help="GameCenter@Mail.ru login")
parser.add_argument("password", help="GameCenter@Mail.ru password")
parser.add_argument("-s", "--server", help="login server address")
return parser.parse_args()
def main():
args = parseArgs()
split = args.login.split("@")
if len(split) < 2:
raise Exception("Bad email '{0}'".format(args.login))
login = split[0]
domain = split[1]
password = args.password
server = args.server or "178.22.90.182:1237"
params = {"Login": login, "Domain": domain, "Password": password}
resp, conn = request(
"http://win.mail.ru/cgi-bin/auth", params, method="POST")
conn.close()
cookies = getCookies(resp)
if 'Mpop' not in cookies:
raise Exception("Authorization failed")
mpop = cookies['Mpop']
url = 'https://authdl.mail.ru/sz.php?hint=AutoLogin'
params = '<?xml version="1.0" encoding="UTF-8"?>' + \
'<AutoLogin ProjectId="3001" SubProjectId="0" ShardId="0" ' + \
'Mpop="%s"/>' % mpop
headers = {'User-Agent': 'Downloader/4050'}
resp, conn = request(url, params, headers, "POST")
xml = resp.read()
conn.close()
root = Xml.fromstring(xml)
uid = root.attrib['PersId']
token = root.attrib['Key']
if not os.path.isfile('archeage.exe'):
raise Exception("archeage.exe not found")
commandline = ' '.join(["start", "archeage.exe", "-r",
"+auth_ip " + server,
"-uid " + uid,
"-token " + token])
print "Starting client with", args.server or "default", "server"
os.system(commandline)
if __name__ == '__main__':
try:
main()
except Exception, e:
print e
Как пользоваться:- Качаем и устанавливаем питон версии 2.7 (добавляем его в переменную среды PATH, если инсталлер не сделал этого сам)
- Создаем текстовый документ с названием mini.py в папке /ArcheAge/Bin32
- Вставляем в созданный файл код скрипта
- Запускаем скрипт из командной строки: mini.py <email> <password>, или создаете .bat файл и запускаете из него
Обновления:- 11.04.2014
- [~] Исправлены некоторые ошибки
- [+] Добавлена возможность подключения клиента к собственному логин-серверу, для этого используем ключ -s или --server
Пример
Код:
mini.py example@mail.ru password -s 127.0.0.1:1337
- [+] Добавлена мини-справка, увидеть ее можно запустив скрипт с ключом -h или --help
Пример
Код:
usage: mini.py [-h] [-s SERVER] login password
positional arguments:
login GameCenter@Mail.ru login
password GameCenter@Mail.ru password
optional arguments:
-h, --help show this help message and exit
-s SERVER, --server SERVER
login server address
- 22.07.2014
- [~] Обновлен юзер-агент
- [~] Исправлена ошибка 'no element found: line 1, column 0'