Показать сообщение отдельно
  #23  
Старый 01.08.2010, 00:48
Byblick32 Byblick32 вне форума
Прохожий
 
Регистрация: 31.07.2010
Сообщения: 6
Репутация: 10
По умолчанию

Привет, пытаюсь загрузить картинку в группу вконтакте.
Пройдясь снифером определил какие щапросы должны быть отправлены:
1. POST-запрос на один из серверов вконтакте, для каждого альбома это один неизменный сервер.
2. После POST-запроса идет редирект на сгенерированный URL вида
Код:
http://vkontakte.ru/photos.php?act=done_add&mid=28229780&aid=114626128&gid=11271478&server=4435&photos=e7f30c8480:x&hash=47a9b92a543a013f0b35d477464c6af8
3. После этого редирект на страницу редактор картинки
Код:
http://vkontakte.ru/photos.php?act=editphotos&id=114626128&oid=-11271478&u=1

IdHTTP1.HandleRedirects в true, хранение кукисов в IdHttp включено.


Код:
procedure TForm1.Button1Click(Sender: TObject);
var params:TStringList;
data : TIdMultiPartFormDataStream;
res,s,location,photos,hash:string;
start,stop:integer;
begin
Params:=TstringList.Create;
/////// АВТОРИЗАЙИЯ  /////////////////
Params.Add('email=my_mail');
Params.Add('pass=my_pass);
Params.Add('expire=');
Params.Add('vk=');
res:=idHttp1.Post('http://login.vk.com/?act=login', Params);
Params.Clear;
 s:=Copy(res, Pos('value', res)+7, 56);
Params.Add('s='+Copy(res, Pos('value', res)+7, 56));
Params.Add('op=slogin');
Params.Add('redirect=1');
Params.Add('expire=0');
Params.Add('to=');
IdHTTP1.HandleRedirects:=true;
res:=IdHttp1.Post('http://vkontakte.ru/login.php', Params);
Params.Clear;
/////// *КОНЕЦ*  /////////////////


////////  ЗАГРУЗКА ИЗОБРАЖЕНИЯ //////////
data := TIdMultiPartFormDataStream.Create;
data.AddFormField('act', 'do_add');
data.AddFormField('id', '114626128');
data.AddFormField('aid', '114626128');
data.AddFormField('gid', '11271478');
data.AddFormField('mid', '28229780');
data.AddFormField('hash', '4d14dca7d838103b8b674892215687f1');
data.AddFormField('vk', '');
data.AddFormField('rhash', '60b06e4bf7502e57c1c69fe004c0f8e6');
data.AddFile('file1','c:\5018_Aleksey_Kalugin_-_Pustie_zemli.jpg','image/jpeg');
  IdHTTP1.HandleRedirects:=true;
res:=IdHttp1.Post('http://cs4435.vkontakte.ru/upload.php', data);
 Memo1.Text:=res; //возвращаеться ~ вот такой код:
Код HTML:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <script> var t = setTimeout("location.href='http://vkontakte.ru/login.php?op=logout'", 7000); </script> </head> <body> <div> <img src="http://vkontakte.ru/images/progress.gif"> </div> <form id="f" name="f" method="post" action="http://vkontakte.ru/photos.php?act=done_add&mid=28229780&aid=114626128&gid=11271478&server=4435&photos=6c19149e03:x&hash=d28d1c09b90b66dc67ab0da4b714c1a0"> /*вот этот URL*/ <input type='hidden' name='act' value='done_add' /><input type='hidden' name='mid' value='28229780' /><input type='hidden' name='aid' value='114626128' /><input type='hidden' name='gid' value='11271478' /><input type='hidden' name='server' value='4435' /><input type='hidden' name='photos' value='6c19149e03:x' /><input type='hidden' name='hash' value='d28d1c09b90b66dc67ab0da4b714c1a0' /><input type='hidden' name='pda' value='' /> </form> <iframe name="mf" onload="try{if (this.contentWindow.location.href.indexOf('slogin') != -1) {clearTimeout(t); if (this.contentWindow.location.href.indexOf('nonenone') != -1) {location.href='http://vkontakte.ru/login.php?op=logout&to=cGhvdG9zLnBocD9hY3Q9ZG9uZV9hZGQmbWlkPTI4MjI5NzgwJmFpZD0xMTQ2MjYxMjgmZ2lkPTExMjcxNDc4JnNlcnZlcj00NDM1JnBob3Rvcz02YzE5MTQ5ZTAzOngmaGFzaD1kMjhkMWMwOWI5MGI2NmRjNjdhYjBkYTRiNzE0YzFhMA--'; return false;} document.f.submit();}} catch(e) {}" border="0" style="border:0px; background-color:#FFF" src="http://login.vk.com/?vk=" width="1" height="1"></iframe> </body> </html>

И вот что еще я заметил, если сгенерированный URL подставить в адресную строку браузера, то картинка загружается в альбом.

Я думаю ответ близок, помогите кому не лень.
Ответить с цитированием