PDA

Просмотр полной версии : IdHTTP в delphi


bag
18.01.2009, 22:44
все привет, помогите сделать коннект к сайту по IdHTTP.
у меня не получается
делаю так:

var
i:integer;
s:string;
begin
lData := TStringList.Create;
http := TIdHTTP.Create(nil);
HTTP.HandleRedirects := True;
HTTP.ProtocolVersion := pv1_0;
HTTP.ProtocolVersion := pv1_0;
HTTP.Request.BasicAuthentication := True;

lData.Clear;
try
for i:=0 to Memo2.Lines.Count - 1 do
begin
lData.Add(memo2.Lines.Strings[i]);
end;
try
HTTP.Post('http://vkontakte.ru', lData);//
s := http.Get('http://vkontakte.ru');
except
end;
memo1.Lines.Add(s);
finally
end;
ldata.free;
end;


в мемо2:
email=123123@123.ru
pass=123123
submit=.

crystalbit
18.01.2009, 22:52
мне кажется надо куки включить, если не сработает, пробуй реферер добавить
думаю еще, хорошо получать результат пост запроса, авось там ответ

и по поводу оптимизации, не удержался:

for i:=0 to Memo2.Lines.Count - 1 do
begin
lData.Add(memo2.Lines.Strings[i]);
end;

можно заменить на

lData:=Memo2.Lines;

bag
18.01.2009, 23:03
спасибо за ответ!
вот это
HTTP.Post('http://vkontakte.ru', lData);//
s := http.Get('http://vkontakte.ru');

заменить на

//HTTP.Post('http://vkontakte.ru', lData);//
s := http.post('http://vkontakte.ru',ldata);

верно?

bag
18.01.2009, 23:04
еще заметил что символ @ меняется на %40 при входе из браузера, а если из дельфи то не меняется, попробовал написать %40 вместо @, в результате получил %2540

bag
19.01.2009, 21:39
Мужики, по-любому кто-то с этим сталкивался, откликнитесь.

crystalbit
19.01.2009, 21:44
мне кажется обязательно нужно включить кукисы

ставь на форму IdCookieManager [Indy Misc]
и в свойстве CookieManager у IdHTTP укажи его
также AllowCookies тру

это необходимое условие) достаточное ли оно - хз)
может еще че-то надо

bag
19.01.2009, 21:50
спасибо, но не помогает((

crystalbit
19.01.2009, 21:58
sources.ru
обсуждение 1 (http://forum.sources.ru/index.php?showtopic=220319)
обсуждение 2 (http://forum.sources.ru/index.php?showtopic=232536)

cylaaaan
21.01.2009, 01:56
Выставляешь компонент IdCookieManager на форму.


var
i:integer;
s:string;
site :string;
begin
site := 'http://vkontakte.ru';

Cookie := TIdCookieManager.Create(nil);
lData := TStringList.Create;
http := TIdHTTP.Create(nil);

HTTP.Cookiemanager := Cookie;
HTTP.HandleRedirects := False;

lData.Clear;
try

for i:=0 to Memo2.Lines.Count - 1 do
begin
lData.Add(memo2.Lines.Strings[i]);
end;

try
HTTP.Post(site+'/login.php', lData);
except
end;

try
s := http.Get(site+HTTP.Response.Location);
except
end;

memo1.Lines.Add(s);

finally
end;

ldata.free;

end;


Не проверял, но кажется так

De-visible
21.01.2009, 02:31
try
HTTP.Post(site+'/login.php', lData);
except
end;

try
s := http.Get(site+HTTP.Response.Location);
except
end;

Начинается(( очередной велосипед?, не легче ли просто разрешить редиректы и все.

cylaaaan
21.01.2009, 02:59
а может понадобится отложить куки для отправки сообщения ? )

De-visible
21.01.2009, 03:02
а может понадобится отложить куки для отправки сообщения ? )
тогда можно обойтись и без куки мэнеджера, если на то пошло, а просто выдергивать куки из заголовка, и посылать их в следующем запросе...

cylaaaan
21.01.2009, 03:23
приведи пример, буду знать

De-visible
21.01.2009, 03:43
приведи пример, буду знать

GooGLE и тогда ты точно будешь знать.
А вообще покажу для примера:

Memo1.Text:=http.Response.RawHeaders.Text;
И ты прикинь, у этого компонента еще много интересных функций...
__________________
(forum.devisible.ru - форум программистов, программы на заказ)

cylaaaan
21.01.2009, 13:04
а, ты об этом, я это знал :P

De-visible
21.01.2009, 20:45
а, ты об этом, я это знал :P
Если бы знал не спрашивал бы...
Хорош флудить, а то тему вынудишь снести...