![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Второй день мучаюсь с авторизацией на сайте. Верней с принятием куков (я думаю дело в них). При успешной авторизации по адресу 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
|
||||
|
||||
|
Цитата:
|