Люди, вы набиваете себе посты, разводя флуд. Перечитайте тему, им поймете о чем я. Дальше нужно сниффать пакеты, которые браузер отсылает серверу при отправке сообщения.
ну загружай страницу с написанием нового сообщения, выдирай от туда хэш, пойми его структуру, декодируй его, и отсылай с остальными параметрами. вот тебе пример отсылки сообщения) 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; .... function SendMessage(const ID, MsgText, MsgTitle: string): boolean; var ResponseText, Hash : string; Post : TStringList; begin Hash := HTTP.Get('http://vkontakte.ru/mail.php?act=a_write_box&to=' + id); Hash := Copy(Hash, Pos('decodehash', Hash) +12, Length(Hash)); Delete(Hash, Pos(#39, Hash), Length(Hash)); Post := TStringList.Create; Post.Add('act=sent'); Post.Add('ajax=1'); Post.Add('chas=' + DecChas(hash)); Post.Add('to_id=' + id); Post.Add('title=' + AnsiToUTF8(MsgTitle)); Post.Add('message=' + AnsiToUTF8(MsgText)); Post.Add('from_box=1'); HTTP.Request.Referer := 'http://vkontakte.ru/mail.php?act=a_write_box&to=' + id; ResponseText := HTTP.Post('http://vkontakte.ru/mail.php', Post); If Pos('отправлено', ResponseText) <> 0 Then Result := True else Result := False; Post.Free; end; //# Отрывки кода из моего компонента
Плохой вопрос. Авторизовавшись на сайте ты должен какбэ сам понять что дальше делать, иначе не будут же каждый шаг тебе показывать.
Пытаюсь отправить сообщения на http://otveti.mail.ru авторизацую прохожу успешно, но вот с отправкой бредятина какая то)) как она должна выглядеть ? я пытался так: Code: procedure TForm5.btn2Click(Sender: TObject); var params,responseres:tstringlist; begin params:=TStringList.Create; responseres:=TStringList.Create; params.Add('action=authaddans'); params.Add('ch=046d65b4c60aa1284e7e83ef3fc93'); params.Add('qid=36881813'); params.Add('f80325b38=1'); params.Add('Body=Это Я =)'); params.Add('source='); responseres.Text:=http1.Post('http://otvet.mail.ru/question/36881696/',params); end;
я по сниферу смотрел (HTTP Analyzer v5). Там у куков точка в начале домена (.mail.ru), что непозволительно. Как я уже вижу ты юзаешь инди, значит тебе надо исправить процедуру добавления куков. В idCookieManager.pas исправь процедуру DoAdd. Вот код. Исправление процедуры в Indy 7-9 Code: procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String); Var LDomain: String; begin ACookie.CookieText := ACookieText; if Length(ACookie.Domain) = 0 then LDomain := AHost else LDomain := ACookie.Domain; ACookie.Domain := LDomain; // если есть точка в начале домена, убираем ее If ACookie.Domain[1] = '.' Then ACookie.Domain := Copy(ACookie.Domain, 2, Length(ACookie.Domain)); if ACookie.IsValidCookie(AHost) then begin if DoOnNewCookie(ACookie) then begin FCookieCollection.AddCookie(ACookie); end else begin ACookie.Collection := nil; ACookie.Free; end; end else begin ACookie.Free; end; end; Либо если влом это все делать и/или ты не знаешь, как, скачай Overbyte Ics. вот ссылка: http://www.overbyte.be P.S. параметр ch по-любому надо декодировать. За 500р могу те готовый код на все это написать
я раскодировал за 1.5 часа) все просто. Выдерите скрипт декодирования из страницы и с помощью него декодируйте какой нить хэш. Сравните оба хэша и разбиритесь, что к чему. все не так и сложно на вид)
Напиши для начала какой-нибудь чекер аккаунтов - авторизуешься и парсишь страницы на количество друзей и прочую инфу.
10-ая версия вообще-то тоже бывает разной. У меня траблы такой не было, хотя я про нее и читал в инете. Это я к тому что надо обновляться.
Прохожу авторизацию, но как отправить сообщение по нажатию кнопки не могу догнать. Привидите плиз пример отправки сообщения... Код авторизации: HTML: procedure TForm1.Button1Click(Sender: TObject); var Http : TidHttp; CM : TidCookieManager; Data : TStringList; StrPage, UserID, UserName : String; i : integer; begin try Http := TIdHTTP.Create(Self); Data := TStringList.Create; CM := TidCookieManager.Create(Http); Http.AllowCookies := true; Http.CookieManager := CM; Http.HandleRedirects := true; Http.Request.Host:='livejournal.com'; Http.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10'; Http.Request.Accept:='text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; Http.Request.AcceptLanguage:='ru,en-us;q=0.7,en;q=0.3'; Http.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7'; Http.Request.Referer:='http://www.livejournal.com/'; Data.Add('mode=login'); Data.Add('user=' + Edit1.Text); Data.Add('password=' + Edit2.Text); StrPage := Http.Post('http://www.livejournal.com/login.bml?ret=1', Data); finally Data.Free; CM.Free; Http.Free; end; if Pos('<input class="logoutlj_hidden" id="user" name="user" type="hidden" value="'+Edit1.Text,StrPage) <> 0 then ShowMessage('Авторизация прошла успешно') else ShowMessage('Авторизация провалилась'); Memo1.Lines.Text := StrPage; end;