|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
idHTTP + idCookieManager
Второй день мучаюсь с авторизацией на сайте. Верней с принятием куков (я думаю дело в них). При успешной авторизации по адресу http://site.ru/login/ идет редирект на http://site.ru/home/ , а при неуспешной - возврат на страницу логина. Так вот авторизация проходит, идёт редирект на http://site.ru/home/, но от туда уже кидает обратно на страницу логина, будто разлогинило (все запросы смотрел через HTTPAnalyzer). Хотя это так и есть. Как правильно куки принять и отправить обратно? В idHTTP AllowCookies := True, CookieManager := IdCookieManager1 (лежит на форме). Все что уже написал, ниже:
Код:
procedure TForm1.Button1Click(Sender: TObject); begin p:=Tstringlist.Create; p.Add('login='+Edit1.Text); p.Add('password='+Edit2.Text); i:=IdHTTP1.Post('http://site.ru/login/', p); if pos('logout', i) > 0 then WebBrowser1.Navigate('http://site.ru/') else Memo1.Lines[0]:='LOGIN FAILED'; end; |
#2
|
|||
|
|||
долбаный Indy, как же он меня бесит... используй 10.5.7 или, что говорят еще - Synapse
|
#3
|
||||
|
||||
на прошлой неделе писал решение точно такой же проблемы, см. в моих сообщениях.
Пишу программы за еду. __________________ |
#4
|
|||
|
|||
Цитата:
----------- Нашёл http://www.delphisources.ru/forum/sh...22&postcount=7 Только оно какое-то длинное получается. Пошёл собирать Цитата:
Последний раз редактировалось StinK, 21.06.2011 в 15:37. |
#5
|
||||
|
||||
Пишу программы за еду. __________________ |
#6
|
|||
|
|||
Цитата:
Только там ругается на необъявленную переменную ACookie. В остальном ошибок не выдает. ---------------------- Опять нашёл - ACookie : string; |
#7
|
||||
|
||||
да, в моем варианте она была полем формы (для последующих запросов), поэтому в исх. не попала ну и наверняка с коллекцией CookieCollection покрутить придется под свой сервер
Пишу программы за еду. __________________ |
#8
|
|||
|
|||
Так-с. При попытке запроса вылетаем с ошибкой 301 Movied Permanently. Оно и понятно, т.к. ставится AIdHTTP.HandleRedirects:=False. Закомментировал строчку, редирект поставил на true, запустил. Теперь вылеатем при логине с 302 Found.
|
#9
|
||||
|
||||
не надо ничего комментить!
Код:
try AIdHTTP.Post('/login.php', AStrings); except if (AIdHTTP.ResponseCode div 100)=3 then begin Пишу программы за еду. __________________ |
#10
|
|||
|
|||
Вернул все назад
Поставил везде свои значения из логов HTTPAnalyzer'а. Код:
DELETE Последний раз редактировалось StinK, 24.06.2011 в 11:44. |
#11
|
|||
|
|||
А, ну и вот сама строчка аунтефикации на сервере:
Код:
DELETE Последний раз редактировалось StinK, 24.06.2011 в 11:43. |
#12
|
|||
|
|||
NumLock, так ничего и не получилось с твоим примером
|
#13
|
||||
|
||||
Код:
unit Unit1; interface uses IdHTTP, IdCookieManager, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient; type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Button1: TButton; Button2: TButton; IdHTTP1: TIdHTTP; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses IdCookie, IdHTTPHeaderInfo, StrUtils; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; AStrings: TStrings; s: String; begin IdHTTP1.AllowCookies:=False; IdHTTP1.Request.UserAgent:='Mozilla/3.0'; AStrings:=TStringList.Create; try AStrings.Add('handle=don.sim2012@yandex.ru'); AStrings.Add('password=123456789'); IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded'; try IdHTTP1.Post('http://lockerz.com/auth/login', AStrings); except Memo2.Lines.Assign(IdHTTP1.Response.RawHeaders); for i:=0 to IdHTTP1.Response.RawHeaders.Count-1 do if AnsiStartsText('Set-Cookie: lockerz2=', IdHTTP1.Response.RawHeaders[i]) then begin s:=IdHTTP1.Response.RawHeaders[i]; s:=Copy(s, 22, Length(s)); s:=Copy(s, 1, Pos(';', s)-1); end; Memo1.Text:=s; end; finally AStrings.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin IdHTTP1.Request.CustomHeaders.Text:='Cookie: lockerz2='+Memo1.Text; IdHTTP1.Request.ContentType:=''; IdHTTP1.Request.ContentLength:=-1; Memo1.Text:=IdHTTP1.Get(IdHTTP1.Response.Location); Memo2.Lines.Assign(IdHTTP1.Response.RawHeaders); Memo1.Lines.SaveToFile('d:\Downloads\lockerz2.htm'); end; end. http://data.cod.ru/112283 в htm будет строчка "Hello, Alexander {My Account} | {Sign Out}", что говорит о работоспособности метода. довести до ума мне лень, основной момент, думаю, понятен. Пишу программы за еду. __________________ |
#14
|
|||
|
|||
Цитата:
Самому наконец-то удалось завести инди10 на 7-ой дельфи. Авторизация проходит, судя по найденной строчки "ВЫХОД". Но при открытии браузера в этом же приложении искомой страницы не вижу. Опять таки только главная страница для входа. Что теперь тут не работает - не знаю. |
#15
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |