Пытаюсь отослать сообщение вконтакте. Снифером проверил все данные. там было так Code: act=sent ajax=1 chas=b0f7f128c260952e3d19962c2 to_id=xxxxxx title= message=прива) from_box=1 я так понел, что парметр Chas надо выдергивать из страницы. Я это сделал. и вот такая ошибка. В чем же дело? я отсылаю тоже самое, что и браузер о_О
DiffiT он не может устареть)) ведь он возникает, при открытии окна сообщений! а сообщение ты можешь хоть час печатать) RaX Выдергивает правильно)) сравнивал. 25 совпадений из 25
он устареет, если ты заново откроешь окно сообщений, т.е. система этот хэш приведет в негодность и он якобы будет пренадлежать предыдущей сессии
да вообще хрень какая-то) впринципе Bad Request, насколько я знаю, возникает только при неверном http-пакете, может где знак пропустил или ещё чего...
где я мог знак пропустить?))) а адресе?)) если бы в адересе, то я бы вылетел с 404й ошибкой)) в заголовках?)) там все скопированно со сниффера))
вот функции получения хэша и отправки: Code: function VK_OpenWriteBox(id: string): string; var Str : string; begin Str := HTTP.Get('http://vkontakte.ru/mail.php?act=a_write_box&to=' + id); str := Copy(str, Pos('decodehash', str) +12, Length(str)); Delete(str, Pos(#39, str), Length(str)); Result := str; end; procedure VK_SendMessage(id, hash, msg: string); var Post : TStringList; begin Post := TStringList.Create; Post.Add('act=sent'); Post.Add('ajax=1'); Post.Add('chas=' + hash); Post.Add('to_id=' + id); Post.Add('title=))'); Post.Add('message=' + AnsiToUTF8(msg)); Post.Add('from_box=1'); HTTP.Request.Referer := 'http://vkontakte.ru/mail.php?act=a_write_box&to=' + id; HTTP.Post('http://vkontakte.ru/mail.php', Post); Post.Free; end;
оказывается этот хэш нуно расшифровать)) как? я напараолся на http://forum.antichat.ru/thread166156.html http://forum.antichat.ru/thread165956.html но как?
Code: <script type="text/javascript"> <!-- window.dec_hash = function(hash) { (function(_){window.decoded_hashes[_]=(function(__){var ___='';for(____=0;____<__.length;++____)___+=__.charAt(__.length-____-1);return ___;})(_.substr(_.length-5)+_.substr(4,_.length-12));})(hash); } window.decoded_hashes = {}; window.decodehash = function(hash) { window.dec_hash(hash); return window.decoded_hashes[hash]; } window.decode_hash = window.decodehash; bukas=decode_hash('46407aef5072f2d8ed9354d92'); alert(bukas); document.write(bukas); //--> </script> как это в delphi сделать то?))
щас все работает))) я долго разбирался, что за хэш и как его декодировать))) нашел вконтакте этот жава скрипт, вставил туда хэш и получил результат)) и взял закодированный хэш и раскодированный. начал сравнивать)) все просто)) вот функция на delphi, если кому надо)) 1.5 часа убил на все это говно Code: function DecChas(chas: string): string; var Decchas : string; str : string; I : Integer; Len : integer; begin str := Copy(chas, 6, 12); Len := Length(str); For I := 0 To Length(str) -1 do begin Decchas := Decchas + str[len]; Inc(len, -1); end; str := Copy(chas, 21, Length(chas) -5); str := str + Copy(chas, 5, 1); Len := Length(str); For I := 0 To Length(str) -1 do begin Decchas := Decchas + str[len]; Inc(len, -1); end; Result := Decchas; end;
Вконтакте хитрая система безопастностию.. Надо уметь хорошо симулировать работу пользователя.. Попробуй указать рефферер "http://vkontakte.ru/mail.php" в хэдере запроса.. + ты не забыл про куки?