Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2012, 05:05
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
Счастье IdHTTP vs. ICQ

Приветствую, старички Давно не виделись Как тут у вас, полная сессия?

А я вот по какому вопросу. Пытаюсь через IdHTTP сделать регистрацию в ICQ. Не спрашивайте "зачем", потом сам поделюсь исходником.

Довёл очередь запросов, заголовки и POST-запрос до побайтового совпадения с тем, что отображается в файрбаге. Но почему-то получаю каждый раз Invalid Date. У кого какие мысли по этому поводу возникают?

На форме связанные IdHTTP + IdSSLIOHandlerSocketOpenSSL + IdCookieManager + IdCompressionIntercept + IdCompressorZLib

Получение капчи:
Код:
procedure TfMain.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  code, img: string;
begin
  code := IdHTTP1.Get('http://www.icq.com/join');
  
  img := code;
  code := LowerCase(code);
  while true do begin
    delete(code, 1, pos('<input', code)+6);
    if pos('name="karmasynckey"',code) < pos('<input',code) then break;
  end;
  delete(code, 1, pos('value="', code)+6);
  code := copy(code, 1, pos('"',code)-1);
  code := UpperCase(code);
  Self.sync_key := code;

  code := img;

  while true do begin
    delete(img, 1, pos('<img', img)+4);
    if pos('src="https://www.icq.com/utils/captcha',img) < pos('<img',img) then break;
  end;
  delete(img, 1, pos('src="', img)+5);
  img := copy(img, 1, pos('"',img)-1);

  while true do begin
    delete(code, 1, pos('<input', code)+6);
    if pos('name="gnm"',code) < pos('<input',code) then break;
  end;
  delete(code, 1, pos('value="', code)+6);
  code := copy(code, 1, pos('"',code)-1);
  code := UpperCase(code);

  Self.cap_code := code;

  ms := TMemoryStream.Create;
  IdHTTP1.Get(img,ms);
  ms.Seek(0,0);
  Image1.Picture.Graphic := TJPEGImage.Create;
  Image1.Picture.Graphic.LoadFromStream(ms);
  ms.Free;
end;

Запрос на регистрацию:
Код:
function TfMain.URLEncode(s: string): string;
var
  i: integer;
begin
  s:=UTF8Encode(s);
  Result:='';
  for i:=1 to length(s) do
    if s[i] in ['0'..'9','a'..'z','A'..'Z','.'] then
      Result := Result + s[i]
    else begin
      Result := Result + '%' + IntToHex(ord(s[i]),2);
    end;
end;

procedure TfMain.Button3Click(Sender: TObject);
var
  ms: TMemoryStream;
  prms: String; prmsl: TStringList;
begin
  prms :=        'karmaSyncKey='+URLEncode(Self.sync_key);
  prms := prms + '&first_name='+URLEncode(Edit2.Text);
  prms := prms + '&last_name='+URLEncode(Edit3.Text);
  prms := prms + '&email='+URLEncode(Edit4.Text);
  prms := prms + '&password='+URLEncode(Edit1.Text);
  prms := prms + '&retype_password='+URLEncode(Edit1.Text);
  prms := prms + '&birthday_day='+URLEncode(IntToStr(StrToInt(copy(MaskEdit1.Text,1,2))));
  prms := prms + '&birthday_month='+URLEncode(IntToStr(StrToInt(copy(MaskEdit1.Text,4,2))));
  prms := prms + '&birthday_year='+URLEncode(IntToStr(StrToInt(copy(MaskEdit1.Text,7,4))));
  prms := prms + '&gender='+URLEncode(IntToStr(Integer(RadioButton2.Checked)+1));
  prms := prms + '&captcha='+URLEncode(Edit5.Text);
  prms := prms + '&gnm='+URLEncode(Self.cap_code);

  prmsl := TStringList.Create;
  prmsl.Text := prms;
  ms := TMemoryStream.Create();
  try
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    IdHTTP1.Request.Referrer := 'http://www.icq.com/join';
    // User-agent задан в параметрах IdHTTP
    IdHTTP1.Post('http://www.icq.com/join',prmsl,ms);
  except
  end;
  prmsl.Free;
  ms.SaveToFile('C:\reg.html');

  ms.free;
  ShowMessage('ok');
end;

Мда, ни подсветки паскалевского синтаксиса, ни спойлеров до сих пор не сделали...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 24.05.2012 в 05:07.
Ответить с цитированием
  #2  
Старый 24.05.2012, 06:17
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Привет,
может флеш-cookies использует? когда сидел без флеша, и в браузере при регистрации icq всегда получал что-то вроде session timed-out
Ответить с цитированием
  #3  
Старый 24.05.2012, 07:18
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Включил FlashBlock, ничего подозрительного не заметил, да и в Indy Cookies при просмотре заголовков совпадают с браузерными...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 24.05.2012, 07:51
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

js тоже ничего лишнего не отправляет?
Ответить с цитированием
  #5  
Старый 24.05.2012, 07:54
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

При отключенном JS рега работает аналогичным образом (никак)... Видимо, таки JS. Поищу, где может быть. Хотя, способ странный.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 24.05.2012, 08:57
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ты сниффером смотрел что передается? У меня просто подобная ситуация была, сервак тупо ошибку возвращал, оказывается в параметре букву надо было большой указать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 24.05.2012, 09:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

firebug-ом просмотрел все заголовки, довёл всё до побайтового сходства.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #8  
Старый 28.05.2012, 15:20
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

В общем, Indy'йский косяк.
Сначала он для TStringList давал кривой Content-Length (решил при помощи потоков). Теперь отдаёт не все куки, которые получил. Все параметры проверил по нескольку раз - он ДОЛЖЕН отдавать всё, но... не отдаёт
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter