PDA

Просмотр полной версии : Авторизация через Http.Post


ArkNet
16.05.2010, 08:45
Если не сложно киньте рабочий исходный код авторизации вконтакте желательно через метод Post и с комментами.
Вот что получилось.

procedure TForm1.Button1Click(Sender: TObject);
var
list: TStringList;
begin
list:=TStringList.Create();
list.Add('u=1');
list.Add('success_url=');
list.Add('fail_url=');
list.Add('try_to_login=1');
list.Add('email='+Edit1.Text);
list.Add('pass='+Edit2.Text);
try
Memo1.Lines.Text:=IdHTTP1.Post('http://login.vk.com/?act=login',list);
finally
list.Free;
IdHTTP1.Disconnect;
end;



После отправки получаю в Memo1

<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=windows-1251' />
</head>
<body onload="document.getElementById('l').submit();">
<form id='l' method='post' action='http://vkontakte.ru/login.php'>
<input type='hidden' name='s' id='s' value='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxx' />
<input type='hidden' name='op' id='op' value='slogin' />
<input type='hidden' name='redirect' id='redirect' value='1' />
<input type='hidden' name='expire' id='expire' value='0' />
<input type='hidden' name='to' id='to' value='' />
</form>
</body>
</html>

Нужна помощь....Знающих людей. :confused:

wolmer
16.05.2010, 08:49
тут посмотри решение проблемы:
forum.antichat.ru/thread165316.html

если нужен готовый код -> пробуй это: forum.antichat.ru/thread204126.html

ArkNet
16.05.2010, 09:34
Спасибо почти розобрался...

Berman
16.05.2010, 09:40
Я юзаю такие настройки для авторизации. (IdHttp)
http://clip2net.com/clip/m39024/1273988160-clip-71kb.jpg
На форме кукименеджер должен быть привязан к idhttp, handleredirects ---> true
AllowCookies ---> True;

код Делфи


procedure Tform1.Button1Click(Sender: TObject);
var
uns: String;
s: String;
outfo: TStringList;
begin
pass := StringReplace(edit2.text, ' ', '+', [rfReplaceAll, rfIgnoreCase]);
outfo := TStringList.Create;
idhttp1.Get('http://vkontakte.ru/login.php?op=a_login_attempt');
outfo.Add('act=login');
outfo.Add('email='+edit1.text);
outfo.Add('pass='+pass);
try
uns:=UTF8toANSI(idhttp1.post('http://login.vk.com/', outfo));
s:=copy(uns, 286, 56);
memo1.Lines.add('Cookies: '+s);
IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');
finally
if s = '' then
begin
//Неудачно
end
else
begin
//Залогплись

Berman
16.05.2010, 09:41
Тут есть обработка исключений типа русского пароля и пароля с пробелами :)

ArkNet
16.05.2010, 11:03
memo1.Lines.add('Cookies: '+s);
IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');
finally
if s = '' then


Можно по подробней эту часть кода обьяснить.

Nelzone
16.05.2010, 11:40
memo1.Lines.add('Cookies: '+s);
IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');
finally
if s = '' then

begin
Label1.caption:='Good';
end
else
begin
Label1.caption:='bad';
end;


Можно по подробней эту часть кода обьяснить.

добовляет лину мемо куки,s String,remixsid айди вк,в дир
vkontakte.ru..
дальше

begin
Label1.caption:='Неудачно';
end
else
begin
Label1.caption:='Залогнлись';
end;

ArkNet
16.05.2010, 11:53
IdCookieManager1.AddCookies('remixsid='+s+ '; path=/; ','vkontakte.ru');

вот эта строчка что дает?
при компиляиции тут вылетает

Incompatible type: 'TIdCookieManedger' and 'String'

M_script_
16.05.2010, 12:21
Тут есть обработка исключений типа русского пароля и пароля с пробелами :)
Если в пароле будет '+', то аккаунт не авторизуется.

ArkNet
16.05.2010, 12:36
Для создания простого чекера акаунтов даже хватит получения кукис.
Если получил 54 значную строку значить валидный.... :rolleyes:


А для того чтоб получить исходный код самой страницы с анкетой что надо? :confused:

И есть ли гдето полная инфа на русском языке про коммпонент Idhhttp желательной с картинками и с видео. :confused:

need_million
16.05.2010, 12:47
используй httpwebrequest инфы по нему много

Berman
16.05.2010, 21:03
Ты что?
http://vk1000.ru/vkontakte.jpg
Конечно авторизуется. Так и нужно!

M_script_
16.05.2010, 21:09
Ты что?
http://vk1000.ru/vkontakte.jpg
Конечно авторизуется. Так и нужно!
Нет. Проверь сам.

HakaR
16.05.2010, 21:22
А для того чтоб получить исходный код самой страницы с анкетой что надо? :confused:

idhttp1.Request.CustomHeaders.Add('Cookie: remixsid=' + s);
str := idhttp1.Get('http://vkontakte.ru/profile.php');

Berman
16.05.2010, 21:26
Всё работает.
http://vk1000.ru/vkontakte.jpg

M_script_
16.05.2010, 22:26
Всё работает.
У тебя же в примере '+' отправляется без urlencode, то есть, как пробел

ArkNet
16.05.2010, 22:38
Все получилось в Memo1 выводит код страницы.
Настройки IdHttp использовал как и Berman
Вот код.


procedure TForm1.Button1Click(Sender: TObject);
var
s,pass,str,uns: String;//переменный типа стринг
outfo: TStringList; // перменная типа стринглист
begin
pass := StringReplace(edit2.text, ' ', '+', [rfReplaceAll, rfIgnoreCase]);
outfo := TStringList.Create; //создаем пост перемменую
idhttp1.Get('http://vkontakte.ru/login.php?op=a_login_attempt'); //забераем исходный текст адресса
outfo.Add('act=login'); //создаем пост запрос
outfo.Add('email='+edit1.text); //создаем пост запрос
outfo.Add('pass='+pass); //создаем пост запрос
try
uns:=UTF8toANSI(idhttp1.post('http://login.vk.com/', outfo)); //отправляем пост запро на нужный адресс
s:=copy(uns, 286, 56); //вытягиваем 56 значную строку
finally
idhttp1.Request.CustomHeaders.Add('Cookie: remixsid=' + s); //отправляем запрос
str := idhttp1.Get('http://vkontakte.ru/profile.php'); //получаем исходник указаного адресса
Memo1.Text:=str; // Выводим в мемо исходный код страницы више указаной
IdHTTP1.Disconnect; // дисконект
end
end;


Теперь пару вопросов....
1. Что мы делаем тут idhttp1.Request.CustomHeaders.Add('Cookie: remixsid=' + s);
2. Что мы делаем тут pass := StringReplace(edit2.text, ' ', '+', [rfReplaceAll, rfIgnoreCase]);
3. Чтоб ввойти на другой аккаунт надо писать IdHTTP1.Disconnect;
4. Зачем это надо
memo1.Lines.add('Cookies: '+s);
IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');
Всем спасибо оказал помощь.... :rolleyes:

HakaR
17.05.2010, 09:49
Теперь пару вопросов....
1. Что мы делаем тут idhttp1.Request.CustomHeaders.Add('Cookie: remixsid=' + s);
2. Что мы делаем тут pass := StringReplace(edit2.text, ' ', '+', [rfReplaceAll, rfIgnoreCase]);
3. Чтоб ввойти на другой аккаунт надо писать IdHTTP1.Disconnect;
4. Зачем это надо
memo1.Lines.add('Cookies: '+s);
IdCookieManager1.AddCookie('remixsid='+s+ '; path=/; ','vkontakte.ru');
Всем спасибо оказал помощь.... :rolleyes:

1. Добавляем куки (можешь вообще не юзать куки менеджер).
4. Можешь убрать эти строчки.

ArkNet
17.05.2010, 22:25
При использование метода Get исходный код отображается неправильно
пример
<div id='coins_left'>? ??? <b>0</b> ????????????????
Заместь знаков вопроса должно писать "неиспользованных голосов."
Все символы кирилицы превратились в знаки вопроса, как это испарвить?