![]() |
|
#1
|
|||
|
|||
![]() Торможу уже три часа.
При обращении к сайту по адресу http://www.site.ru/auth/login/?auths...sword=PASSWORD идёт авторизация. Сниффером проверил - больше ничего не передаётся. Куки естественно ставятся. Ну вот почему не могу авторизоваться? ![]() Код:
var data:tstringlist; PageProfile:string; error:boolean; begin IdHTTP1.AllowCookies:=true; IdHTTP1.HandleRedirects:=true; data:=tstringlist.create; data.Add('authsave=1'); data.Add('login=LOGIN'); data.Add('password=PASSWORD'); //http://www.site.ru/auth/login/?authsave=1&login=LOGIN&password=PASSWORD error:=false; try PageProfile:=IdHTTP1.Post('http://www.site.ru/auth/login/', data); Memo1.Lines.Add(PageProfile); except error:=true; end; Плюнул на Delphi - достал любимый PHP: PHP код:
Авторизация проходит на ура. Я уже не знаю, где может быть ошибка. Гляньте пожалуйста свежим глазом. ![]() |
#2
|
||||
|
||||
![]() попробуй еще поставить
Код:
idhttp1.request.useragent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'; Мне однажды это помогло авторизоваться |
#3
|
|||
|
|||
![]() Спасибо, попробую, но в свойствах idHTTP1 я прописал юзерагент. Сейчас вот с Synapse попробовал - проходит авторизация. А idHTTP какой-то заколдованный
![]() |
#4
|
||||
|
||||
![]() А IdCookieManager (или как его там) юзаем?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
![]() idHttp1.CookieManager := IdCookieManager1;
на форму кинул соответствующий компонент из indy misc - результат прежний |
#6
|
||||
|
||||
![]() Точно все куки встают?
Caption кнопки должно отправляться? Попробуй TidMultiPartFormDataStream. |
#7
|
|||
|
|||
![]() Цитата:
А вот как проверить пришли ли куки? За совет спасибо. Сейчас пересяду за домашний комп и попробую. |
#8
|
||||
|
||||
![]() Через снифер.
Мне IE HTTP Analyzer 5 нравится... |
#9
|
|||
|
|||
![]() Посидел часок со снифером. Уже запутался в том, как запрос отфутболивается по 301, 302 редиректам.
Да и сайт отдаёт непонятно в какой форме. Почитал тут, что правильно забирать нужно в потоковой форме. Раскроем данные. Может так сможет кто-то, что-то подсказать. Нужна авторизация на этом форуме: http://parapa.mail.ru/forums/ Он же http://www.parapa.ru/forums/ Адрес на который отправляются данные: http://www.parapa.ru/auth/login/ или http://parapa.mail.ru/auth/login/ Данные доступа: Login: gamesbots@mail.ru или GamesMaster (авторизуется и так и так) Pass: qwerty Передаваемые данные согласно снифферу. data.Add('authsave=0'); data.Add('login=gamesbots@mail.ru'); data.Add('password=qwerty'); Или если через TidMultiPartFormDataStream data.AddFormField('authsave','0'); data.AddFormField('login','GamesMaster'); data.AddFormField('password',qwerty'); PageProfile:=IdHTTP1.Post('http://www.parapa.ru/auth/login/', data); |
#10
|
||||
|
||||
![]() Свежий пример авторизации на Mail.ru.
|
#11
|
||||
|
||||
![]() Код:
function GetCookie(FText: TStringList): String; var N, I: Integer; S: String; begin Result := ''; for N := 0 to FText.Count - 1 do if Pos('set-cookie:', LowerCase(FText[N])) = 1 then begin S:= FText[N]; Delete(S, 1, Length('set-cookie: ')); I:= Pos(';', S); S:= Copy(S, 1, I-1); if Result <> '' then Result := Result + '; '; Result := Result + S; end; end; Код:
procedure TForm1.Button1Click(Sender: TObject); var Data: TStringList; Otvet: String; S: String; begin Otvet:= IdHTTP1.Get('http://parapa.mail.ru/forums/'); IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1.Response.RawHeaders), 'parapa.mail.ru'); // добавляем сокет IdHTTP1.Request.Referer:= 'http://parapa.mail.ru/forums/'; IdHTTP1.HandleRedirects:= False; Data:= TStringList.Create; Data.Add('login='+LabeledEdit1.Text); if CheckBox1.Checked then Data.Add('authsave=1'); Data.Add('password='+LabeledEdit2.Text); try Otvet:= IdHTTP1.Post('http://parapa.mail.ru/auth/login/', Data); except IdHTTP1.Request.Clear; S:= IdHTTP1.Response.Location; if Pos('err=', S) <> 0 then Memo1.Lines.Add('Логин или пароль неверны!') else begin Otvet:= Utf8ToAnsi(IdHTTP1.Get(IdHTTP1.Response.Location)); if Pos('Добро пожаловать', Otvet) <> 0 then Memo1.Lines.Add('Успешно авторизовались!'); end; end; Data.Free; end; |
#12
|
|||
|
|||
![]() Ты мой спаситель! Огромное спасибо!
|
#13
|
||||
|
||||
![]() Всегда пожалуйста.
Точно не знаю, но есть еще пост запрос после авторизации на http://parapa.mail.ru/forums/profile.php?do=dst |
#14
|
|||
|
|||
![]() Есть один вопрос:
Цитата:
E2010 Incompatible types: 'TIdURI' and 'string' Нашёл топик, где обсуждается такая проблема - http://forum.vingrad.ru/forum/topic-...1913394/0.html Скорее всего дело в Indy судя по сообщениям. У меня версия 10.5.5 |
#15
|
||||
|
||||
![]() Код:
var U:TIdURI; begin U:=TidURI.Create('parapa.mail.ru'); IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1.Response.RawHeaders),U); |