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