Просмотр полной версии : [Delphi]/[Pascal] Задай вопрос, получи ответ
fenixelite
17.06.2010, 10:27
Блин, ничего не пойму с авторизацией.... Ну не проходит она... Редиректит на страницу с профилем, но вход не осуществлен(т.е на странице с моим профилем: "Чтобы увидеть полную информацию о пользователе, войдите в систему. ") Вроде дельфи уже другую скачал, но все тоже самое :( Код авторизации в посте №#6737(но в коде я уверен на 99%, т.к неделю назад им авторизовывался)... Проблема с куки насколько я понял, в cookiecollection после авторизации только :
l=xxxxxxx; path=/; domain=login.vk.com
p=ca505b639ddeba5a27cdf28138eafd6bba05; path=/; domain=login.vk.com
Надеюсь на вашу помощь. Помощь могу оплатить(просто срочно нужно)....
heretic1990
17.06.2010, 10:38
fenixelite, попробуй так
function GetSubStr(InputStr, BeginStr, EndStr: String): String;
var
s: String;
sp, ep: Integer;
begin
Result := '';
if pos(BeginStr, InputStr) <> 0 then begin
sp := pos(BeginStr, InputStr)+length(BeginStr);
s := copy(InputStr,sp,length(InputStr));
ep := pos(EndStr,s)-1;
Result := copy(s,1,ep);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mp: TIdMultiPartFormDataStream;
begin
IdHTTP1.Get('http://vkontakte.ru');
IdHTTP1.Request.Referer := 'Referer: http://vkontakte.ru/login.php';
mp := TIdMultiPartFormDataStream.Create;
mp.AddFormField('op', 'a_login_attempt');
Memo1.Lines.Text := IdHTTP1.Post('http://vkontakte.ru/login.php', mp);
Memo1.Lines.SaveToFile('c:\111.html');
mp.Free;
mp := TIdMultiPartFormDataStream.Create;
mp.AddFormField('act', 'login');
mp.AddFormField('success_url', '');
mp.AddFormField('fail_url', '');
mp.AddFormField('try_to_login', '1');
mp.AddFormField('to', '');
mp.AddFormField('vk', '');
mp.AddFormField('email', Edit1.Text);
mp.AddFormField('pass', Edit2.Text);
mp.AddFormField('expire', '1');
Memo1.Lines.Text := IdHTTP1.Post('http://login.vk.com', mp);
Memo1.Lines.SaveToFile('c:\222.html');
mp.Free;
mp := TIdMultiPartFormDataStream.Create;
mp.AddFormField('op', 'slogin');
mp.AddFormField('redirect', '1');
mp.AddFormField('expire', '1');
mp.AddFormField('to', '');
mp.AddFormField('s', GetSubStr(Memo1.Text, 'id=''s'' value=''', ''''));
mp.AddFormField('email', 'alena@tdutn.com');
mp.AddFormField('pass', 'flouer');
mp.AddFormField('expire', '1');
Memo1.Lines.Text := IdHTTP1.Post('http://vkontakte.ru/login.php', mp);
Memo1.Lines.SaveToFile('c:\333.html');
mp.Free;
if pos('(это Вы)', Memo1.Text) > 0 then
MessageDlg('Залогинились.'+#13#10+GetS ubStr(Memo1.Text, '<h1> <b>Online</b>', '<span>'), mtInformation, [mbOK], 0)
else
MessageDlg('Не залогинились!', mtInformation, [mbOK], 0);
end;
fenixelite
17.06.2010, 11:00
heretic1990, да тоже самое все... проблема с куками... Remixsid не приходит, а без него не авторизоваться..... Щас попробую indy обновить..
heretic1990
17.06.2010, 11:03
на новой инди у меня всё работало хорошо.
fenixelite
17.06.2010, 11:10
heretic1990, да и TrueBit через мой код авторизовался... ладно щас инди обновить попробую..
fenixelite
17.06.2010, 12:49
Обновил... не помогло... я в шоке Оо
У кого то еще решения есть? :confused:
GhostOnline
17.06.2010, 12:55
Неужели так трудно додуматься самому нужные кукисы обрабатывать, а не надеяться на кривой менеджер, который подводит на каждом втором сайте?
Кто-нибудь может дать пример кода для работы через winsock2 с socks5||proxy?
RedFern.89
17.06.2010, 19:16
fenixelite, исправь процедуру DoAdd в файле idCookieManager.pas и сам файл перемести в папку lib. Код процедуры:
Только в версиях 9.x.x
procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String);
Var
LDomain: String;
begin
ACookie.CookieText := ACookieText;
if Length(ACookie.Domain) = 0 then LDomain := AHost
else LDomain := ACookie.Domain;
ACookie.Domain := LDomain;
// Если есть точка в начале домена, удаляем ее
If ACookie.Domain[1] = '.' Then
ACookie.Domain := Copy(ACookie.Domain, 2, Length(ACookie.Domain));
if ACookie.IsValidCookie(AHost) then
begin
if DoOnNewCookie(ACookie) then
begin
FCookieCollection.AddCookie(ACookie);
end
else begin
ACookie.Collection := nil;
ACookie.Free;
end;
end
else begin
ACookie.Free;
end;
end;
crazyserega1994
17.06.2010, 19:26
Что значит знак # в делфи?
fenixelite
17.06.2010, 19:33
RedFern.89, Огромное спасибо. Все работает :)
GhostOnline
17.06.2010, 20:02
Что значит знак # в делфи?
Код символа ACSII
Например,
ShowMessage(#111#107);
покажет 'ok'
RedFern.89
17.06.2010, 21:23
кстати! уважаемый GhostOnline прав. Ведь выдрать куки из заголовков - это не так уж и сложно. Особенно для вк. Тебе понадобица только remixsid.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot