Имеется сайт "фор гейм". Надо зайти на него и спарсить данные с загруженного списка аккаунтов в мемо. Все бы хорошо ,но почему то 2,3,4,5 и тд аккаунтам присваивается информация первого. ну выглядит это как то так
Код:
Аккаунт [Ссылки могут видеть только зарегистрированные пользователи. ];******
----------------
Point Blank - последний вход в игру: 17 марта 2012 в 23:30
RF Online - последний вход в игру: 1 февраля 2012 в 21:04
Aion - последний вход в игру: 5 октября 2011 в 20:24. <span><span>Оплачено до 4 июня 2012</span> года.
Аккаунт [Ссылки могут видеть только зарегистрированные пользователи. ];*******
----------------
Point Blank - последний вход в игру: 17 марта 2012 в 23:30
RF Online - последний вход в игру: 1 февраля 2012 в 21:04
Aion - последний вход в игру: 5 октября 2011 в 20:24. <span><span>Оплачено до 4 июня 2012</span> года.
Тут должны быть другие данные а берутся из первого.
Код захода и парса
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
v,g,login,pass:string;
i:Integer;
SSLIO : TIdSSLIOHandlerSocketOpenSSL;
begin
//
SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create( idHTTP1 );
SSLIO.SSLOptions.Method := sslvSSLv3;
idHTTP1.IOHandler := SSLIO;
idhttp1.request.useragent:='Mozilla/5.0 (Windows; U; Windows NT 6.0; rv:1.9.2.11) Gecko/20101012 MRA 5.5 (build 02842) Firefox/3.6.11 GTB7.1 ( .NET CLR 3.5.30729; .NET4.0E)';
reg:=tregexpr.Create;
//
for I := 0 to memo2.lines.count -1 do //В мемо 2 будут строки с акками
begin
Login:= Copy(memo2.lines[i],1,Pos(';',memo2.lines[i])-1); //Копируем логин в "Login"
Pass:= Copy(memo2.lines[i],Pos(';',memo2.lines[i])+1,Length(memo2.lines[i])); //Копируем пароль в "Pass"
//Посылаем запрос на авторизацию
idhttp1.Get('https://ru.4game.com:443/widgetjson/signin?&loginField='+Login+'&passwordField='+Pass+'&serviceId=0&jsonp&callback=jsonp123123');
//Отделяем аккаунты друг от дурга в мемо 1
memo1.lines.Add('Аккаунт '+Login+';'+Pass);
memo1.lines.Add('----------------');
//Переходим на главную страницу акка
s:=idhttp1.Get('https://ru.4game.com/subscription/index.html');
//Переводим с каракуль на русский
setLength(c, length(s));
g:=utf8decode(c);
//Парсим какие игры есть на аккаунте
Reg.expression:='<p><a href="/subscription/service/(.*?).html">(.*?)</a> — последний вход в игру (.*?) </p>';
if reg.exec(g) then
repeat
form1.memo1.lines.Add(reg.Match[2]+' - последний вход в игру: '+reg.Match[3]);
until not Reg.ExecNext ;
end;
end;
end.
Добавил комментарии что бы было удобнее разобраться.
P.s вариант что программа авторизуется дважды под одними данными отпадает. данные со сниффера:
ht tps: //ru.4game.com:443/widgetjson/signin?&loginField=[Ссылки могут видеть только зарегистрированные пользователи. ]&passwordFie ld=******&serviceId=0&jsonp&callback=jsonp123123
ht tps: //ru.4game.com:443/widgetjson/signin?&loginField=[Ссылки могут видеть только зарегистрированные пользователи. ]&passwordField= *******&serviceId=0&jsonp&callback=jsonp123123
Вопрос: В чем может быть проблема ?
Счас проверил , программа показывает в сниффере , что авторизуетс под вторыми данными , а на самом деле почему то получает опять страницу первого...
Последний раз редактировалось =PaLeTiZaToR=; 10.09.2012 в 18:31.