Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2010, 16:17
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию idHTTP...

Торможу уже три часа.
При обращении к сайту по адресу http://www.site.ru/auth/login/?auths...sword=PASSWORD
идёт авторизация.

Сниффером проверил - больше ничего не передаётся. Куки естественно ставятся.

Ну вот почему не могу авторизоваться?

Код:
var data:tstringlist;
      PageProfile:string;
      error:boolean;
begin
 IdHTTP1.AllowCookies:=true;
 IdHTTP1.HandleRedirects:=true;
 data:=tstringlist.create;
 data.Add('authsave=1');
 data.Add('login=LOGIN');
 data.Add('password=PASSWORD');
 //http://www.site.ru/auth/login/?authsave=1&login=LOGIN&password=PASSWORD
 error:=false;
 try
  PageProfile:=IdHTTP1.Post('http://www.site.ru/auth/login/', data);
  Memo1.Lines.Add(PageProfile);
 except
  error:=true;
 end;

Плюнул на Delphi - достал любимый PHP:

PHP код:
$url "http://www.site.ru/auth/login/"//УРЛ, куда отправлять данные
 
$login 'LOGIN'//Логин
 
$password 'PASSWORD'//Пароль
 
$user_cookie_file $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'//Полный путь до файла, где будем хранить куки
 
$authsave '1'//
 
$in 'Вход'//Кнопка входа


 
function auth($url) {
        global 
$login$pasword$authsave$user_cookie_file$in// Получаем все POST данные

        
$ch curl_init($url);
        
curl_setopt($chCURLOPT_URL,$url);
        
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");


        
curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file); //Куки раз
        
curl_setopt($chCURLOPT_COOKIEJAR,  $user_cookie_file); //Куки два


        
curl_setopt($chCURLOPT_POST,1); //Будем отправлять POST запрос


 /*
 Формируем и отправляем тот самый POST запрос.
 Как видите, это простая строка, мало чем отличающаяся от GET.
 */
        
curl_setopt($chCURLOPT_POSTFIELDS,"login=$login&password=$password&authsave=1&submit=$in");
        
$html curl_exec($ch);
        
curl_close($ch);
        return 
$html//
 
}


auth($url); // Авторизируемся.

 
function browser($url) {
        
$user_cookie_file $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'//Получаем сохраненный после авторизации файл с куками.
        
$ch curl_init($url);
        
curl_setopt($chCURLOPT_URL,$url);
        
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
        
curl_setopt($chCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
        
curl_setopt($chCURLOPT_COOKIEFILE$user_cookie_file); //Подставляем куки раз
        
curl_setopt($chCURLOPT_COOKIEJAR,  $user_cookie_file); //Подставляем куки два
        
$html curl_exec($ch);
        
curl_close($ch);
        return 
$html//Возвращаем ответ
 


Авторизация проходит на ура. Я уже не знаю, где может быть ошибка. Гляньте пожалуйста свежим глазом.
Ответить с цитированием
  #2  
Старый 22.11.2010, 16:38
Аватар для T-dayne
T-dayne T-dayne вне форума
Начинающий
 
Регистрация: 26.01.2010
Сообщения: 180
Репутация: 31
По умолчанию

попробуй еще поставить
Код:
idhttp1.request.useragent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)';

Мне однажды это помогло авторизоваться
Ответить с цитированием
  #3  
Старый 22.11.2010, 16:53
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Спасибо, попробую, но в свойствах idHTTP1 я прописал юзерагент. Сейчас вот с Synapse попробовал - проходит авторизация. А idHTTP какой-то заколдованный
Ответить с цитированием
  #4  
Старый 22.11.2010, 17:17
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А IdCookieManager (или как его там) юзаем?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 22.11.2010, 17:22
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

idHttp1.CookieManager := IdCookieManager1;
на форму кинул соответствующий компонент из indy misc - результат прежний
Ответить с цитированием
  #6  
Старый 22.11.2010, 17:45
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Точно все куки встают?
Caption кнопки должно отправляться?
Попробуй TidMultiPartFormDataStream.
Ответить с цитированием
  #7  
Старый 22.11.2010, 17:50
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Цитата:
Сообщение от pesi
Точно все куки встают?
Caption кнопки должно отправляться?
Попробуй TidMultiPartFormDataStream.
Со значением кнопки перепровал всё, и так вписывал, и кодировки менял, и через urlencode прогонял - результата нет.
А вот как проверить пришли ли куки?

За совет спасибо. Сейчас пересяду за домашний комп и попробую.
Ответить с цитированием
  #8  
Старый 22.11.2010, 17:54
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Через снифер.
Мне IE HTTP Analyzer 5 нравится...
Ответить с цитированием
  #9  
Старый 22.11.2010, 20:20
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Посидел часок со снифером. Уже запутался в том, как запрос отфутболивается по 301, 302 редиректам.
Да и сайт отдаёт непонятно в какой форме. Почитал тут, что правильно забирать нужно в потоковой форме.

Раскроем данные. Может так сможет кто-то, что-то подсказать. Нужна авторизация на этом форуме:

http://parapa.mail.ru/forums/
Он же
http://www.parapa.ru/forums/

Адрес на который отправляются данные:
http://www.parapa.ru/auth/login/
или
http://parapa.mail.ru/auth/login/

Данные доступа:

Login: gamesbots@mail.ru или GamesMaster (авторизуется и так и так)
Pass: qwerty


Передаваемые данные согласно снифферу.

data.Add('authsave=0');
data.Add('login=gamesbots@mail.ru');
data.Add('password=qwerty');

Или если через TidMultiPartFormDataStream

data.AddFormField('authsave','0');
data.AddFormField('login','GamesMaster');
data.AddFormField('password',qwerty');

PageProfile:=IdHTTP1.Post('http://www.parapa.ru/auth/login/', data);
Ответить с цитированием
  #10  
Старый 22.11.2010, 22:46
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Свежий пример авторизации на Mail.ru.
Ответить с цитированием
  #11  
Старый 22.11.2010, 23:58
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Код:
function GetCookie(FText: TStringList): String;
var
  N, I: Integer;
  S: String;
begin
  Result := '';
  for N := 0 to FText.Count - 1 do
    if Pos('set-cookie:', LowerCase(FText[N])) = 1 then
    begin
      S:=  FText[N];
      Delete(S, 1, Length('set-cookie: '));
      I:= Pos(';', S);
      S:= Copy(S, 1, I-1);
      if Result <> '' then
        Result := Result + '; ';
      Result := Result + S;
    end;
end;

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Data: TStringList;
  Otvet: String;
  S: String;
begin
  Otvet:= IdHTTP1.Get('http://parapa.mail.ru/forums/');
  IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1.Response.RawHeaders), 'parapa.mail.ru');  // добавляем сокет
  IdHTTP1.Request.Referer:= 'http://parapa.mail.ru/forums/';
  IdHTTP1.HandleRedirects:= False;

  Data:= TStringList.Create;
  Data.Add('login='+LabeledEdit1.Text);
  if CheckBox1.Checked then
    Data.Add('authsave=1');
  Data.Add('password='+LabeledEdit2.Text);

  try
    Otvet:= IdHTTP1.Post('http://parapa.mail.ru/auth/login/', Data);
  except
    IdHTTP1.Request.Clear;
    S:= IdHTTP1.Response.Location;
    if Pos('err=', S) <> 0 then
      Memo1.Lines.Add('Логин или пароль неверны!')
    else
    begin
      Otvet:= Utf8ToAnsi(IdHTTP1.Get(IdHTTP1.Response.Location));
      if Pos('Добро пожаловать', Otvet) <> 0 then
        Memo1.Lines.Add('Успешно авторизовались!');
    end;
  end;

  Data.Free;
end;
Ответить с цитированием
  #12  
Старый 23.11.2010, 00:00
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Ты мой спаситель! Огромное спасибо!
Ответить с цитированием
  #13  
Старый 23.11.2010, 00:07
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Всегда пожалуйста.
Точно не знаю, но есть еще пост запрос после авторизации на http://parapa.mail.ru/forums/profile.php?do=dst
Ответить с цитированием
  #14  
Старый 23.11.2010, 09:52
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Есть один вопрос:
Цитата:
IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1. Response.RawHeaders), 'parapa.mail.ru'); // добавляем сокет
Эта строка как я понимаю вычленяет из ранее полученных заголовков куки, написанной выше функцией и устанавливает их в CookieManager. Вот только что-то ругается у меня:
E2010 Incompatible types: 'TIdURI' and 'string'

Нашёл топик, где обсуждается такая проблема - http://forum.vingrad.ru/forum/topic-...1913394/0.html
Скорее всего дело в Indy судя по сообщениям. У меня версия 10.5.5
Ответить с цитированием
  #15  
Старый 23.11.2010, 10:41
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Код:
var U:TIdURI;
begin
 U:=TidURI.Create('parapa.mail.ru');
 IdHTTP1.CookieManager.AddCookie(GetCookie(IdHTTP1.Response.RawHeaders),U);
Может так
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:27.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025