Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Ekz 
Форум » Все о Delphi » Интернет и сети » synapse, редирект и cookie)) (Решил зайти с другого бока.)
synapse, редирект и cookie))
DublДата: Понедельник, 25.10.2010, 23:41 | Сообщение # 1
Ранг 3
Группа: Проверенные
Сообщений: 73
Награды: 0
Репутация: 0
Статус: Offline
Так. Значит. Я вот решил подойти к сетевому коддингу с другой стороны. не через инди а через синапс. Если кто-то работал с этой библиотекой помогите разобрться с редиректом:

Код функции получения куков:

Code

function coocs(method,zap,params,ref,mime,proxyTYPE,proxy,port,proxyUSER,proxyPASS:string;headerS:array of string):string;
var Header : TStringList;
    Contents : TStringList;
    httpsend: THTTPSend;
     ss: TStringStream;
     i:integer;
     rev:string;
begin
   Header := TStringList.Create;
   Contents := TStringList.Create;
   ss := TStringStream.Create('');
   httpsend:=THTTPSend.Create;
   HTTPsend.UserAgent:='Opera 9.0';
   httpsend.Headers.Insert(0,'Referer: '+ref);//referer
   //httpsend.Cookies.Text:=cooc;                //coocies
   httpsend.MimeType:=mime;
   for i:=1 to 100 do begin
     if trim(headers[i])<>''then
       Header.Add(headers[i])
     else break;
   end;

   httpsend.Headers.AddStrings(Header);        //headers
   if proxyTYPE='HTTP' then begin
     httpsend.ProxyHost:=proxy;
     httpsend.ProxyPort:=port;
   end else if proxyTYPE='SOCKS 4' then begin
     //HTTPsend.Sock.SocksType:=
     HTTPsend.Sock.SocksIP := proxy;
     HTTPsend.Sock.SocksPort := PORT;
     //HTTPsend.Sock.SocksUsername := proxyUSER;
     //HTTPsend.Sock.SocksPassword := proxyPASS;
     //HTTPsend.Sock.SocksOpen;
   end else if proxyTYPE='SOCKS 5' then begin
     //HTTP.Sock.SocksType := ST_Socks5 ;
     HTTPsend.Sock.SocksIP := proxy;
     HTTPsend.Sock.SocksPort := PORT;
     HTTPsend.Sock.SocksUsername := proxyUSER;
     HTTPsend.Sock.SocksPassword := proxyPASS;
     //HTTPsend.Sock.SocksOpen;
   end;
   if method='GET' then begin
     httpsend.HTTPMethod('GET',zap );
   end;
   if method='POST' then begin
     ss.WriteString(params);
     httpsend.Document.LoadFromStream(ss);
     httpsend.HTTPMethod('POST',zap);
   end;
   Contents.LoadFromStream(httpsend.Document);
   rev := Contents.Text;

  //////////////////////////////////////////////

   if pos('vkrugudruzei.ru/?sessid=',GetLocation(httpsend.Headers))>0 then
              begin
                httpsend.Document.Clear;
                httpsend.Headers.Clear;
                httpsend.HTTPMethod('get','https://partner.r01.ru/AB/about_abonent.khtml');
                httpsend.Document.SaveToStream(ss);
              end
           else

/////////////////////////////////////////////

     result:=httpsend.Cookies.Text;

   header.Free;
   contents.Free;
   ss.Free;
   httpsend.Free;
   exit;
end;

функция GetLocation:

Code

function GetLocation(const headers:TStringList):string;
var i:integer;
begin
   for i := 0 to (headers.Count - 1) do
     if pos('Location: ',headers[i])>0 then
         begin
           Result:=copy(headers[i],10,length(headers[i])-9);
           break;
         end;
end;

Дескать куки до редиректа то я получаю(ASPSESSIONIDSQSARDBT), а вот с редиректом беда. Я в коде уже запутался если честно. Функця кук не моя, я лишь ее пытаюсь модернизировать.

То, что заключено в ///////// это вставки из http://www.webdelphi.ru/2010....s-https . Помогите понять, почему редирект не работает?

 
AdminДата: Вторник, 26.10.2010, 14:29 | Сообщение # 2
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Не работал, к сожалению помочь ничем не могу...

Не оказываю помощь через личные сообщения и ICQ
 
DublДата: Среда, 27.10.2010, 10:52 | Сообщение # 3
Ранг 3
Группа: Проверенные
Сообщений: 73
Награды: 0
Репутация: 0
Статус: Offline
Ничего страшного. Наконец-то допер, что можно сделать принудительный редирект)) Но все равно спасибо)

Добавлено (27.10.2010, 10:52)
---------------------------------------------
Так, тут снова траблище. Я понял, что у меня усваивается лишь последний set-cookies из ответа. А мне нужны все параметры причем в одном результате. Я нашел код:

Code

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.ValueFromInd ex[N]);
           //Вставить куки
         End;
     End

Но это на индейке, а мне бы в синапс переписать, но что-то не выходит, основной код это тот, что в первом посте без вставок(кода между /////////////).
Пожалуйста помогите)) Сам вчера не мог весь вечер разобраться.
 
Форум » Все о Delphi » Интернет и сети » synapse, редирект и cookie)) (Решил зайти с другого бока.)
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2018
Хостинг от uCoz