PDA

Просмотр полной версии : [Delphi]/[Pascal] Задай вопрос, получи ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [28]

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
Неужели так трудно додуматься самому нужные кукисы обрабатывать, а не надеяться на кривой менеджер, который подводит на каждом втором сайте?

Скотти
17.06.2010, 13:18
Кто-нибудь может дать пример кода для работы через 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.