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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2010, 17:08   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию вместо memo передать в переменную

Код:
For N:=0 To Form1.IdHTTP1.Response.RawHeaders.Count-1 Do
    Begin
      If Form1.IdHTTP1.Response.RawHeaders.Names[N]='Set-Cookie' Then
        Begin
          Form1.Memo.Lines.Append(Form1.IdHTTP1.Response.RawHeaders.ValueFromIndex[N]);
        End;
    End;
так куки добавляются в мемо, хорош в случае когда Set-Cookie больше одного, у меня как раз этот случай, но передать Cookie так и не нашёл как в этом случае, от сюда вопросец возник, как в место мемо использовать переменную что бы отправить в таком виде
Код:
FH.Request.CustomHeaders.Add('Cookie: '+c);
bulldog5293 вне форума Ответить с цитированием
Старый 24.12.2010, 17:21   #2
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

TStringlist - пробуй
dosha вне форума Ответить с цитированием
Старый 24.12.2010, 18:54   #3
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Небольшой пример, как я записываю куки. Данный код писался для моей программы. Причиной написания послужило то, что Indy не хочет записывать несколько кукисов =(

Кукисы хранятся в переменной CookieList в формате:
name=value
name=value

Может быть пригодится.
Код:
var
	CookieList : TStringList;
	http := TIdHTTP;

function TForm1.GetEx(URL: string): string;
begin
  InsertCookie;
  try
    result := http.Get(URL);
  except
    try
      result := http.Get(URL);
    except
      Exit;
    end;
  end;
  LoadCookies;
end;

procedure TForm1.InsertCookie;
var
  s: string;
  i: Integer;
begin
  s := 'Cookie: ';
  for i := 0 to CookieList.Count - 1 do
    s := s + CookieList.Strings[i] + '; ';

  //s := s + 'cc=1; com_jw_fpss=true; hotlog=1'#13#10'Cookie2: $Version=1';
  http.Request.CustomHeaders.text := s;
end;

procedure TForm1.LoadCookies;
var
  s: string;
  i, y, z: Integer;
  new, temp: TStringList;
  OldP, NewP: string;
begin
  new := TStringList.Create;
  temp := TStringList.Create;
  s := http.Response.RawHeaders.text;
  while Pos('Set-Cookie', s) <> 0 do
  begin
    y := Pos('Set-Cookie', s);
    i := PosEx(': ', s, y) + 2;
    new.Add(Copy(s, i, PosEx(';', s, i) - i));
    Delete(s, y, 10);
  end;

  if new.text <> '' then
    for i := 0 to new.Count - 1 do
    begin
      s := new.Strings[i];
      y := Pos('=', s);
      NewP := Copy(s, 1, y - 1);
      if CookieList.text <> '' then
        for y := 0 to CookieList.Count - 1 do
        begin
          s := CookieList.Strings[y];
          z := Pos('=', s);
          OldP := Copy(s, 1, z - 1);
          if OldP = NewP then
          begin
            temp.Add(new.Strings[i]);
            new.Strings[i] := '-=-';
            CookieList.Strings[y] := '-=-';
          end;
        end;
    end;

  if new.text <> '' then
    for i := 0 to new.Count - 1 do
      if new.Strings[i] <> '-=-' then
        temp.Add(new.Strings[i]);

  if CookieList.text <> '' then
    for i := 0 to CookieList.Count - 1 do
      if CookieList.Strings[i] <> '-=-' then
        temp.Add(CookieList.Strings[i]);

  CookieList.Clear;
  CookieList := temp;
  //CookieList.SaveToFile(ExtractFilePath(Application.ExeName) + 'Cookies.dat');
end;
Как использовать
Код:
s := form1.getex('http://www.google.com/')

Последний раз редактировалось kangreon; 24.12.2010 в 18:58.
kangreon вне форума Ответить с цитированием
Старый 24.12.2010, 22:05   #4
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

а -=- для чего?
bulldog5293 вне форума Ответить с цитированием
Старый 24.12.2010, 22:42   #5
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Это что-то вроде уникального символа. =)
Если серер отправил value=;
Для дальнейшего удаления данной кукисы.

Код писался без последующей оптимизации =)

Последний раз редактировалось kangreon; 24.12.2010 в 22:46.
kangreon вне форума Ответить с цитированием
Старый 24.12.2010, 23:13   #6
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

ну не чё, спс за идею, дальше разберусь и оптимизирую под себя

всё таки решил поступить как посоветовал dosha, и использовать TStringlist
Код:
       For N:=0 To Http.Response.RawHeaders.Count-1 Do
    Begin
      If Http.Response.RawHeaders.Names[N]='Set-Cookie' Then
        Begin
          CookieList.Add(Http.Response.RawHeaders.ValueFromIndex[N]);
        End;
    End;
но как теперь передать отпарсеные куки? И так пробывал
Код:
CookieList.Add(Http.Request.CustomHeaders);
И эдак
Код:
Http.Request.CustomHeaders.Add(CookieList);
И вот так
Код:
CookieList:=Http.Request.CustomHeaders.Add;
Посоветуйти как быть в такой ситлуации

Последний раз редактировалось Stilet; 25.12.2010 в 20:05.
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать переменную с javascript в php master3763 JavaScript, Ajax 8 29.11.2010 18:27
Передать переменную в поток,туплю. larin1974 Помощь студентам 2 20.11.2009 05:25
Как подставить или передать переменную (Quest3D) AnnaSmertina JavaScript, Ajax 2 24.05.2009 18:11
передать переменную другой форме Var17 Общие вопросы Delphi 5 07.01.2009 02:03
передать переменную ar4i Общие вопросы Delphi 10 04.12.2006 14:30