Вот код, которым пытаюсь выполнить поставленную задачу: Code: var hash : String; Data, findhash : TStringList; begin data:=tstringlist.create; findhash:=tstringlist.create; data.add('addMember=1'); data.add('app_settings_1=1'); Data.add('app_settings_2=1'); data.add('app_settings_4=1'); data.add('app_settings_8=1'); data.add('app_settings_16=1'); Data.add('app_settings_32=1'); data.add('app_settings_64=1'); Data.add('app_settings_128=1'); data.add('app_settings_1024=1'); data.add('app_settings_2048=1'); data.add('app_settings_4096=1'); data.add('app_settings_8192=1'); findhash.text:=IdHTTP1.get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615'); hash:=copy(findhash[168], 1,50); data.add(hash); data.add('id=1911836'); Но в ответ пустота... Смотрел, там страничка пустая, т.е. как будто бы я не авторизовался... Но я действительно авторизовываюсь и могу парсить рейтинг и другие элементы страницы. Code: Data.Add('email='+Edit1.Text); Data.Add('pass='+Edit2.Text); Uns := HTTP.Post('http://login.vk.com/?act=login', Data); Uns:=copy(uns, pos('<input type='#39'hidden'#39' name='#39's'#39' value='#39'', uns)+37, 56); ЯП: Delphi 7 Помогите пожалуйста в этой задачке...
Я отправляю тоже самое Пробовал уже всё... И вот так делал: Code: auth.add('app=1911836'); auth.add('layout= popup'); auth.add('type browser'); auth.add('settings=15615'); findhash.text:=IdHTTP1.POST('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615', auth);
Значит ты уже нажимал (ранее) разрешить доступ для данного приложения P.S. Именно этого эффекта я и добиваюсь...
kosmo987 спасибо за инструкцию Только я гет сюда: уже делал... и в ответе app_hash пустой... P.S. Я думал это делается, намного проще
kosmo987 Ну я же привёл код По моему я там делаю описанные тобой действия, но get запрос мне ничего не возвращает Если сделать браузер на форме и дать пользователю самому разрешить все действия, то тогда всё норм.
lamer811, смотри исходники моего плеера. Там есть авторизация через VKontakte API 3.0 ссылка: Ссылка та тему с плеером (antichat.ru) Ссылка та тему с плеером (codingworld.ru)
kosmo987 Да ты понял правильно, кстати и правда хэш не верно получал, не с той строчки вообще его брал. Исправил Теперь делаю по твоему алгоритму... RedFern.89 спасибо. Посмотрел сорцы, посмотрел авторизацию Но в том то и трабла, что ты авторизацию прошёл, а доступа к данным ты не имеешь, до тех пор, пока пользователь не нажмёт кнопочку разрешить по ссылке в первом посте (только с твоим id приложения)
1) Code: log := http.get('http://vkontakte.ru/login.php?app=1931178&layout=popup&type=browser&settings=1026'); data := TStringList.create; data.Add('act=login'); data.Add('app=1931178'); data.Add('app_hash='+Parse('app_hash = ''', log, '''')); data.Add('vk='); data.Add('captcha_sid='); data.Add('captcha_key='); data.Add('email='+email); data.Add('pass='+pass); data.Add('expire=0'); data.Add('permanent=1' 2) Code: try log:= http.post('http://login.vk.com/', data); data.clear; data.Add('s='+parse('value=''', log, '''')); data.Add('act=auth_result'); data.Add('m=4'); data.Add('permanent=1'); data.Add('app=1931178'); data.Add('app_hash='+Parse('app_hash" value="', log, '"')); 3) Code: log := http.post('http://vkontakte.ru/login.php', data); 4) Code: log := http.get('http://login.vk.com/?vk=') Если я верно понимаю, то мне осталось 2 шага до истины RedFern.89 Тебе кстати, это тоже понадобится... Выводить окошко браузера для того чтобы пользователь разрешил доступ к данным: легко, но не красиво
Программно нажать так и не смог... Поэтому решил проблему другим путём, а именно вывожу в веб браузере окошко, в котором пользователь сам нажимает разрешить Естественно в это окошко я изначально передаю данные, которые пользователь указывал при авторизации в программе (мыло и пароль)
ты меня разочаровываешь авторизируешся и делаешь вот так: Code: var ca:tstringlist; cs,app_settings_hash:string; begin ca:=tstringlist.Create; try cs:=http.Get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615'); except end; app_settings_hash:=copy(cs, pos('app_settings_hash = ''', cs)+21, 18); ca.Clear; ca.Add('addMember=1'); ca.Add('app_settings_1=1'); ca.Add('app_settings_2=1'); ca.Add('app_settings_4=1'); ca.Add('app_settings_8=1'); ca.Add('app_settings_16=1'); ca.Add('app_settings_32=1'); ca.Add('app_settings_64=1'); ca.Add('app_settings_128=1'); ca.Add('app_settings_1024=1'); ca.Add('app_settings_2048=1'); ca.Add('app_settings_4096=1'); ca.Add('app_settings_8192=1'); ca.Add('hash='+app_settings_hash); ca.Add('id=1911836'); try cs:=http.post('http://vkontakte.ru/apps.php?act=a_save_settings', ca); except end; while pos('captcha_sid', cs)<>0 do begin { тут разгадываем капчу } // потовряем запрос: ca.Clear; ca.Add('addMember=1'); ca.Add('app_settings_1=1'); ca.Add('app_settings_2=1'); ca.Add('app_settings_4=1'); ca.Add('app_settings_8=1'); ca.Add('app_settings_16=1'); ca.Add('app_settings_32=1'); ca.Add('app_settings_64=1'); ca.Add('app_settings_128=1'); ca.Add('app_settings_1024=1'); ca.Add('app_settings_2048=1'); ca.Add('app_settings_4096=1'); ca.Add('app_settings_8192=1'); ca.Add('hash='+app_settings_hash); ca.Add('id=1911836'); ca.Add('captcha_sid='+sid); ca.Add('captcha_key='+капча); try cs:=http.post('http://vkontakte.ru/apps.php?act=a_save_settings', ca); except end; end; /// проверяем, сработало-ли. try http.Get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615'); except end; if pos('login_success', http.Response.Location)<>0 then showmessage('good job, bro!') else showmessage('hui.'); ca.free; end; проверил, всё работает.
Блин у меня было почти тоже самое, когда я бросил это дело... Было пару косяков с параметрами, а всё не внимательность... ъ Спасибо! С меня +