|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите разобраться почему не работает программа
Собственно, начал изучать работу с сетью в Дельфи и решил написать программу, проверяющую верно ли указаны данные для авторизации на одном из сайтов по IT.
Код:
idhttp1.HandleRedirects:=true; idHttp1.AllowCookies:=True; idhttp1.CookieManager:=IdCookieManager1; IdHTTP1.Request.AcceptEncoding:='deflate'; IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)'; IdHTTP1.Request.AcceptLanguage := 'ru-RU,ru;q=0.9,en;q=0.8'; IdHTTP1.Request.Connection := 'keep-alive'; IdHTTP1.Request.AcceptEncoding:='deflate'; Data:=TstringList.Create; Data.Add('actions=add'); Data.Add('logines=wormix'); Data.Add('passwdr=wormix1'); StrPage:=idhttp1.Post('http://excode.ru/aut.php', Data); if Pos('accaunt', StrPage)<>0 then Label3.Caption:='Good' else Label3.Caption:='Bad'; Data.Free; Программа выдаёт всё время бэд. Подозреваю дело в том, что после авторизации на aut.php идёт редирект на index.php, хотя редирект в инди вкл, в общем нз, прошу помощи. Delphi 7, Indy предустановлена. Последний раз редактировалось grib_aga, 19.12.2012 в 15:15. |
#2
|
||||
|
||||
а если искать "account"?
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
и задать:
Код:
Request.ContentType:='application/x-www-form-urlencoded'; Пишу программы за еду. __________________ |
#4
|
||||
|
||||
Цитата:
ТС, попробуй правильно заполнить поле referrer и перед постом формы авторизации делать get на основную страницу, возможно, там ставятся какие-то куки... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
PhoeniX, NumLock, поправил код, не работает.
Код:
idHttp1 := TIdHTTP.Create(Self); CM := TidCookieManager.Create(idHttp1); idHttp1.CookieManager := CM; idhttp1.HandleRedirects:=true; idHttp1.AllowCookies:=true; IdHTTP1.Request.UserAgent := 'Opera/9.80 (Windows NT 5.1; MRA 5.10 (build 5339)) Presto/2.12.388 Version/12.11'; IdHTTP1.Request.Host:='excode.ru'; IdHTTP1.Request.Accept:='text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'; IdHTTP1.Request.AcceptLanguage:= 'ru-RU,ru;q=0.9,en;q=0.8'; IdHTTP1.Request.AcceptEncoding:='gzip, deflate'; IdHttp1.Request.Referer:='http://excode.ru/'; IdHTTP1.Request.Connection:= 'Keep-Alive'; IdHTTP1.Request.ContentLength:=42; IdHttp1.Request.ContentType:='application/x-www-form-urlencoded'; Data:=TstringList.Create; Data.Add('actions=add'); Data.Add('logines=wormix'); Data.Add('passwdr=wormix1'); StrPage:=idhttp1.Get('http://excode.ru/'); StrPage:=idhttp1.Post('http://excode.ru/aut.php', Data); if Pos('accaunt', StrPage)<>0 then Label3.Caption:='Good' else Label3.Caption:='Bad'; Data.Free; CM.Free; idHttp1.Free; Вообще в оригинале передаётся ещё строка наподобе этой, каждый раз разная: Код:
Cookie: n2date=1355926357; md=0; nexdate=1355926344; auth=0; __utma=91456206.326904374.1355912958.1355927014.1355940739.5; __utmb=91456206.5.10.1355940739; __utmc=91456206; __utmz=91456206.1355912959.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided) У меня в программе она, конечно же, не передатёся, хотя КукиМенеджер вкл. Объясните. Если пробывать передавать так, то тоже бэд: Код:
idHttp1.Request.CustomHeaders.Add(Cookie: бла-бла-бла) |
#6
|
||||
|
||||
"Строка наподобие этой" должна управляться CookieManager-ом. Вручную её ставить не нужно.
Попробуй Код:
Data.Text := 'actions=add&logines=wormix&passwdr=wormix1'; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
||||
|
||||
работает
Код:
var strm: TStringStream; i: Integer; s: String; begin IdHTTP1.HandleRedirects:=False; IdHTTP1.AllowCookies:=True; IdHTTP1.CookieManager:=IdCookieManager1; strm:=TStringStream.Create('actions=add&logines=wormix&passwdr=wormix1'); try IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded'; try IdHTTP1.Post('http://excode.ru/aut.php', strm); except if IdHTTP1.ResponseCode div 100 = 3 then begin for i:=0 to IdCookieManager1.CookieCollection.Count-1 do IdHTTP1.Request.CustomHeaders.Add('Cookie: '+IdCookieManager1.CookieCollection.Items[i].CookieText); IdHTTP1.Request.Referer:='http://excode.ru/index.php'; IdHTTP1.Request.ContentType:='text/html'; s:=IdHTTP1.Get('http://excode.ru/index.php'); if Pos('accaunt', s)>0 then Label1.Caption:='ok' else Label1.Caption:='err'; end; end; finally strm.Free; end; end; Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 20.12.2012 в 09:53. |
#8
|
|||
|
|||
Цитата:
Цитата:
Вышеприведённый код отказывается у меня работать, кукисы так и не посылаются, даже еrr не выводится. |
#9
|
||||
|
||||
IdVers.inc
Цитата:
Пишу программы за еду. __________________ |
#10
|
|||
|
|||
NumLock, программа крашится с ошибкой "Project raised exception class EidHTTPProtocolException with message 'HTTP 1.1/ 302 Found'. Process Stopped".
До этого не было ошибки т.к. на автомате сменил редирект с выкл на вкл. Что делать? Последний раз редактировалось grib_aga, 20.12.2012 в 12:30. |
#11
|
||||
|
||||
-убрать галочку "Stop...", чтобы в debug-режиме не поднималось исключение
-см. внимательно исходник. там как раз при возникновении исключения и происходит дальнейшая работа тут проблема в том, что при возникновении редиректа (если его обработка включена) при 302 коде ответа Инди не сохраняет куки и еще к тому же делает редирект POST'ом на index.php (без кук). естественно сервер в шоке. я же перехватываю редирект сам (обработка выключена), считываю куки и делаю GET на index.php уже с куками. в итоге там и находится заветное "accaunt". Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Dagmanor (05.08.2013)
|
#12
|
|||
|
|||
Воистину, спасибо, очень помогли!
|
#13
|
|||
|
|||
Спасибо и от меня, помогли!
|