Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 19:40   #1
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию Куки Synapse

Здравствуйте! Есть вот такое код авторизации на synapse для сайта turbobit. Авторизация происходит но без куки. Из-за этого не могу спарсить прямую ссылку на файл. Как можно решить эту проблему???

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP: THTTPSend;
  Res: boolean;
  s: TStringList;
  str: string;
begin
  HTTP := THTTPSend.Create;
  s := TStringList.Create;
  try
    str := EncodeUrl('user[login]=' +
      { Edit1.Text } 'b2141395@rmqkr.net' + '&user[pass]=' +
      { Edit2.Text } '12345678' + '&user[submit]=' + utf8encode('Войти'));
    HTTP.Document.Write(pointer(str)^, length(str));
    HTTP.Headers.Clear;
    HTTP.MimeType := 'application/x-www-form-urlencoded';
    Res := HTTP.HTTPMethod('POST', 'http://turbobit.net/user/login');
    if Res then
    begin
      if pos('location: /login', AnsiLowerCase(HTTP.Headers.Text)) > 0 then
        ShowMessage('Превышен лимит входов')
      else
      begin
        HTTP.Headers.Clear;
        Res := HTTP.HTTPMethod('Get', 'http://turbobit.net/');
        if Res then
        begin
          s.LoadFromStream(HTTP.Document);
          if pos('logout', s.Text) <> 0 then
            ShowMessage('Добро пожаловать')
          else
            ShowMessage('Пароль неверный!');
        end;
      end;
    end;
  finally
    HTTP.Free;
    s.Free;
  end;
end;
Pearl777 вне форума Ответить с цитированием
Старый 30.01.2013, 21:00   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

У синапса вообще нет проблем с куками. Коли ты авторизовался, сохрани куки в переменную, ну или в файл и добавляй куки, когда начнешь качать ссылки
Lardes вне форума Ответить с цитированием
Старый 30.01.2013, 21:12   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Тут THTTPSend создается и уничтожается при нажатии на кнопку. Если скачивание файла находится на другой кнопке, то сами собой куки не передадутся между разными объектами.
Лучше тогда создать THTTPSend в Oncreate формы, а уничтожать в Ondestroy. Тогда не нужно будет заботиться о сохранении куков.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.01.2013, 21:16   #4
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию

Lardes, Можно пример, пожалуйста! А то я не очень в этом разбираюсь, пока ещё новичок в delphi.
Pearl777 вне форума Ответить с цитированием
Старый 30.01.2013, 21:37   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Все куки хранятся в THTTPSend.Cookies. Это стринглист. THTTPSend.Cookies.Text - строка со всеми куками.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.01.2013, 22:39   #6
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию

Куки получил, а как теперь их отправить на сервер вместе с Post запросом авторизации?
Pearl777 вне форума Ответить с цитированием
Старый 30.01.2013, 22:50   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Если у Вас и правда ДВА РАЗНЫХ httpsend'а, то при скачивании файла, нужно строчку с куками назначить httpsend'у (задать httpsend.cookies.text), предварительно сохранив куки в коде авторизации.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 30.01.2013, 23:08   #8
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию

Можно ли какой нибудь пример? Так как не совсем все понимаю.
Pearl777 вне форума Ответить с цитированием
Старый 30.01.2013, 23:42   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

По-моему, легче использовать 1 httpsend:
Код:
var
  Form1: TForm1;
  HTTP: THTTPSend;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  Res: boolean;
  s: TStringList;
  str: string;
begin
  s := TStringList.Create;
  try
    str := EncodeUrl('user[login]=' +
      { Edit1.Text } 'b2141395@rmqkr.net' + '&user[pass]=' +
      { Edit2.Text } '12345678' + '&user[submit]=' + utf8encode('Войти'));
    HTTP.Document.Write(pointer(str)^, length(str));
    HTTP.Headers.Clear;
    HTTP.MimeType := 'application/x-www-form-urlencoded';
    Res := HTTP.HTTPMethod('POST', 'http://turbobit.net/user/login');
    if Res then
    begin
      if pos('location: /login', AnsiLowerCase(HTTP.Headers.Text)) > 0 then
        ShowMessage('Превышен лимит входов')
      else
      begin
        HTTP.Headers.Clear;
        Res := HTTP.HTTPMethod('Get', 'http://turbobit.net/');
        if Res then
        begin
          s.LoadFromStream(HTTP.Document);
          if pos('logout', s.Text) <> 0 then
            ShowMessage('Добро пожаловать')
          else
            ShowMessage('Пароль неверный!');
        end;
      end;
    end;
  finally
    s.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  HTTP := THTTPSend.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  HTTP.Free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.01.2013, 00:19   #10
Pearl777
Форумчанин
 
Регистрация: 04.01.2013
Сообщений: 171
По умолчанию

Спасибо большое за помощь!! Прошу так же помочь с парсером.
Вот у меня есть парсер на indy
Код:
var
a,b:string; c,d:integer;
begin
a := IdHTTP1.Get('http://turbobit.net/0xxnjwwd14gn.html');
c := Pos ('<h1><a href=',a);
d := Pos ('><b',a);
b := Copy(a,c+29, d - c - 29);
Memo1.text := b;
Помогите переделать его под Synapse. Пробовал вместо первой строки написать вот такой код:
Код:
a := HTTP.HTTPMethod('Get','http://turbobit.net/0xxnjwwd14gn.html');
Но он не работает.
Pearl777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не пашет synapse bulldog5293 Компоненты Delphi 0 21.10.2011 19:42
Synapse FanRa3 Общие вопросы Delphi 1 09.12.2010 21:06
Куки ilSMoKEli Работа с сетью в Delphi 1 15.06.2010 11:09
Куки Kinematik Работа с сетью в Delphi 0 27.12.2008 04:53