Привет, пытаюсь загрузить картинку в группу вконтакте.
Пройдясь снифером определил какие щапросы должны быть отправлены:
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 подставить в адресную строку браузера, то картинка загружается в альбом.
Я думаю ответ близок, помогите кому не лень.