|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Логин с помощью Indy
Есть проблема с Indy HTTP
надо залогиниться на сайтег Код:
tst:= TStringList.Create; tst.Add('nick=***'); tst.Add('password=*'); s:=IdHTTP1.Post('урл',tst); тут всё впорядке, выдаётся правильная страница, на которой нужно ввести дополнительный пароль ввожу дополнительный пароль Код:
tst.Clear; tst.Add('check=***'); s:=IdHTTP1.Post('урл',tst); и в ответ приходит уже первая страница с сообщением о том, что надо бы ввести логин и пароль в чём тут фишка, куки не работают чтоли? Последний раз редактировалось Admin, 11.10.2010 в 10:26. |
#2
|
|||
|
|||
Ага, именно они. Еще проверить referal не помешает.
|
#3
|
|||
|
|||
Куки включены и менеджер подключен:
Код:
IdHTTP1.AllowCookies:=True; IdHTTP1.CookieManager:=IdCookieManager1; А где насчёт referal смотреть? |
#4
|
|||
|
|||
в запросе указывается с какой страницы происходит вызов.
соответсвенно, тебе надо это указать. Если мне не изменяет память, то просто надо в момент вызова добавить этот refer в заголовок запроса. |
#5
|
|||
|
|||
Если это такая вот штука:
Код:
IdHTTP1.Request.Referer:='урл'; |
#6
|
|||
|
|||
ну еще проверь, что никаких скрытых полей на форме нет. Если есть, то надо передавать значения и для них.
|
#7
|
|||
|
|||
не нету, да там запросов других не идёт, я смотрел
там флеш, на нём пароль набирается, я чарльзом выловил запрос с паролем, но его не принимает, даже попробовал в хроме через гет ввести этот второй пароль - не катит. значит не в куки проблема значит наверное каким-то образом надо вводить пароль на флеше... |
#8
|
||||
|
||||
ссылку можно посмотреть
|
#9
|
|||
|
|||
|
#10
|
||||
|
||||
1. Попробуй сначала гет запрос на http://neverlands.ru/
2. Добавить Код:
idhttp1.Request.Referer:= 'http://neverlands.ru/'; Код:
data:= TStringList.Create; data.Add('player_nick=***'); //указать логин data.Add('=Пароль'); //это не меняем data.Add('player_password=***'); //указать пароль s:= IdHTTP1.Post('http://neverlands.ru/game.php', data); Код:
if Pos('Неверный логин или пароль', S)>0 then ShowMessage('Неверный логин или пароль!') |
#11
|
|||
|
|||
Авторизация логин\пароль всегда проходит, не получается ввод флеш пароля, после которого вылетает на главную с ошибкой:
Код:
IdHTTP1.Get('http://neverlands.ru/'); idhttp1.Request.Referer:= 'http://neverlands.ru/'; tst:= TStringList.Create; tst.Add('player_nick=***'); tst.Add('=Пароль'); tst.Add('player_password=***'); s:=IdHTTP1.Post('http://neverlands.ru/game.php',tst); ShowMessage(s); //тут получаю код страницы с флеш вводилкой пароля tst.Clear; Memo1.Clear; IdHTTP1.Request.Referer:='http://neverlands.ru/game.php'; tst.Add('flcheck=***'); tst.Add('nid=***'); s:=IdHTTP1.Post('http://neverlands.ru/game.php',tst); ShowMessage(s); // а тут уже ошибку |
#12
|
||||
|
||||
При отпраке первого пароля получаем ответ, в ответе нужно найти значение <param name="flashvars" value="plid=2063100"> а точнее нужно то что идет после plid= в моем случаи это 2063100
Код:
IdHTTP1.Request.Referer:='http://neverlands.ru/swf/flashpass.swf'; data.Clear; data.Add('nid=***'); //указать то что мы искали в ответе data.Add('flcheck=***'); //указать второй пароль s:= IdHTTP1.Post('http://neverlands.ru/game.php', data); |
#13
|
|||
|
|||
Исправил реферрер, исправил очерёдность nid и flcheck, значения правильные, всё равно не работает
Что еще может быть неправильно с моей стороны? |
#14
|
||||
|
||||
Ф-Я для поиска сокета, а то IdHTTP его не добавляет придется его найти и вручную добавить
Код:
function GetCookie(S: String): String; var I: Integer; begin Result := ''; I:= Pos('SEPAPSQE', S); if I > 0 then begin Delete(S, 1, I-1); I:= Pos(';', S); Result := Copy(S, 1, I); end; end; Шаг первый Код:
S:= IdHTTP1.Get('http://neverlands.ru/'); //гет запрос для получения сокета IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1.Response.RawHeaders.Text), 'neverlands.ru'); // добавляем сокет IdHTTP1.Request.Referer:= 'http://neverlands.ru/'; Data:= TStringList.Create; Data.Add('player_nick=***'); //указать логин Data.Add('=Пароль'); //это не меняем Data.Add('player_password=***'); //указать пароль S:= IdHTTP1.Post('http://neverlands.ru/game.php', Data); Data.Free; Шаг второй Код:
IdHTTP1.Request.Referer:='http://neverlands.ru/swf/flashpass.swf'; Data:= TStringList.Create; Data.Add('flcheck=*****'); //указать второй пароль Data.Add('nid=*****'); //указать то что мы искали в ответе, по ходу дела это значение не меняется S:= IdHTTP1.Post('http://neverlands.ru/game.php', Data); Data.Free; S:= IdHTTP1.Get('http://neverlands.ru/main.php'); Вся петрушка в том, что IdHTTP автоматом не добавлял сокет |