Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Посылка Cookies на сервер   Найти похожие ветки 

 
0n!k ©   (2005-08-01 22:52) [0]

Как можно реализовать посылку Cookies на сервер? при помощи ClientSocket.


 
tesseract ©   (2005-08-01 23:46) [1]

Если накатаешь браузер. Cookie- стандарт HTML.


 
Чапаев ©   (2005-08-02 10:03) [2]

Куки на сервер? Ты сперва разберись, что такое куки, тогда и вопросов таких не будет.


 
Alexander Panov ©   (2005-08-02 10:05) [3]

Удалено модератором


 
Alexander Panov ©   (2005-08-02 10:06) [4]

Кукис передаются в заголовке передаваемого запроса в параметре Cookie:

GET http://my_site.ru/cgi-bin/getforum.pl? HTTP/1.1
Accept: */*
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: my_site.ru
Proxy-Connection: Keep-Alive
Cookie: name=My_Name; password=My_Password


 
0n!k ©   (2005-08-02 12:25) [5]

я пишу так


var
 c: Char;
 MySocket: TWinSocketStream;
 logined: string; i:integer;
 Socket: TCustomWinSocket;
begin
MySocket := TWinSocketStream.Create(Socket, 60000);

edit3.Text:="No";
ClientSocket1.Host:=edit1.Text;
ClientSocket1.port:=SpinEdit1.Value;
ClientSocket1.Active:=true;
ClientSocket1.Open;

for i:=0 to 15 do
begin
 logined:=memo1.Lines[i]+#13;
 mySocket.Write(logined, Length(memo1.Lines.text));
end;
while not MySocket.WaitForData(100) do
 Application.ProcessMessages;
 if MySocket.Read(c, 1)=1 then
  edit3.Text:="Yes";

 MySocket.Free;

end;

end.


в memo находится такой запрос


POST /login.php HTTP/1.1
Host: www.уу.ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Accept: text/xml,application/xml,application/xhtml+xml,text/
html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us
Accept-Charset: windows-1251,utf-8,iso-8859-1;q=0.3,*;q=0.1
Keep-Alive: 300
Referer: http://уу/login.php
Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D;
phpbb2mysql_sid=cff8b0b526a221553bc23ee57a8daee4
Content-Type: application/x-www-form-urlencoded
Content-Length: 54
Connection: keep-alive
Accept-Encoding: gzip,deflate
TE: gzip,deflate


и у меня выскакивает вот такая ошибка socket must be in blocking mode

Что это может значить и правельно ли я пишу?


 
Alexander Panov ©   (2005-08-02 12:49) [6]

ClientSocket1.Active:=true;
ClientSocket1.Open;

дублируют друг друга.

0n!k ©   (02.08.05 12:25) [5]
и у меня выскакивает вот такая ошибка socket must be in blocking mode

Что это может значить и правельно ли я пишу?


Это означает именно то, что написано в сообщении об ошибке:
Сокет должен быть в режиме stBlocking


 
Digitman ©   (2005-08-02 12:49) [7]

это значит, что объекты класса TWinSocketStream предназначены для работы совместно с объектами класса TClientSocket, имеющими значение св-ва ClientType НЕ ИНАЧЕ КАК ctBlocking


 
0n!k ©   (2005-08-02 13:22) [8]

Всеравно не получается, вот код

 www.dd666.nm.ru/project.zip  


 
Digitman ©   (2005-08-02 13:41) [9]


> 0n!k ©   (02.08.05 13:22) [8]


ну и к чему эта ссылка ?


 
Alexander Panov ©   (2005-08-02 13:41) [10]

Что не получается?

1. сразу явная ошибка;

Неправилно:
logined:=memo1.Lines[i]+#13;
 mySocket.Write(logined, Length(memo1.Lines.text));


Нужнго:
logined:=memo1.Lines[i]+#13;
 mySocket.Write(logined[1], Length(logined));


2. Зачем для передачи используется TWinSocketStream?


 
0n!k ©   (2005-08-02 14:25) [11]

> 2. Зачем для передачи используется TWinSocketStream?

а что можно использовать?


 
0n!k ©   (2005-08-02 14:33) [12]

А вот так можно?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs,ScktComp, StdCtrls, Spin;

type
 TForm1 = class(TForm)
   ClientSocket1: TClientSocket;
   Button2: TButton;
   Memo1: TMemo;
   Edit1: TEdit;
   Edit3: TEdit;
   SpinEdit1: TSpinEdit;
   procedure Button2Click(Sender: TObject);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Tmp:string;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
edit3.Text:="No";
ClientSocket1.Host:=edit1.Text;
ClientSocket1.port:=SpinEdit1.Value;
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Socket.SendText(memo1.Lines.text+#13#10);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Tmp:=Tmp+Socket.ReceiveText;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
ShowMessage(Tmp);
end;

end.


 
Alexander Panov ©   (2005-08-02 14:57) [13]

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Tmp:=Tmp+Socket.ReceiveText;
end;


здесь надо проверять, все ли данные выбраны из буфера, и строку tmp проверять на флажок - окончание строки, например, #13#10.

Примерно так:

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
 Len: Integer;
 EndStr: Integer;
begin
 Repeat
   Len := Socket.ReceiveLength;
   Tmp:=Tmp+Socket.ReceiveText;
   EndStr := Pos(#13#10,Tmp);
   if EndStr>0 then
   begin
     Memo1.Lines.Add("Принята строка:"+ Copy(Tmp,1,EndStr-1));
     Delete(Tmp,1,EndStr+1);
   end;
 until Len=0;

end;


 
Alexander Panov ©   (2005-08-02 14:58) [14]

В дополнение.
Надо учесть, что за одно выполнение ReceiveText может быть прянято несколько строк, и логику из [13] изменить в соответствии с этим.


 
0n!k ©   (2005-08-02 20:57) [15]

В результате был создан вот такой алгоритм.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ScktComp, StdCtrls, Spin;

type
TForm1 = class(TForm)
  ClientSocket1: TClientSocket;
  Button2: TButton;
  Memo1: TMemo;
  Edit1: TEdit;
  Edit3: TEdit;
  SpinEdit1: TSpinEdit;
   Memo2: TMemo;
  procedure Button2Click(Sender: TObject);
  procedure ClientSocket1Connect(Sender: TObject;
    Socket: TCustomWinSocket);
  procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  procedure ClientSocket1Disconnect(Sender: TObject;
    Socket: TCustomWinSocket);
private
  { Private declarations }
public
  { Public declarations }
end;

var
Form1: TForm1;
Tmp:string;
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin

ClientSocket1.Host:=edit1.Text;
ClientSocket1.port:=SpinEdit1.Value;
ClientSocket1.Open;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText(memo1.Lines.text+#13#10);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Len: Integer;
EndStr: Integer;
begin
Repeat
  Len := Socket.ReceiveLength;
  Tmp:=Tmp+Socket.ReceiveText;
  EndStr := Pos(#13#10,Tmp);
  if EndStr>0 then
  begin
    Memo2.Lines.Add("Ïðèíÿòà ñòðîêà:"+ Copy(Tmp,1,EndStr-1));
    Delete(Tmp,1,EndStr+1);
  end;
until Len=0;
Socket.Free;
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage(Tmp);
end;

end.


Я запускаю и происходит отправление сообщения, но оно не прекращается! как, сделать сокету timeout, чтобы программа могла спокойно считать ответ с сервера.


 
Alexander Panov ©   (2005-08-02 22:42) [16]

Что ж ты с кодом как следует не разобрался?
Там ошибка, как я сейчас обнаружил.

Repeat
 Len := Socket.ReceiveLength;
 Tmp:=Tmp+Socket.ReceiveText;
 EndStr := Pos(#13#10,Tmp);
 if EndStr>0 then
 begin
   Memo2.Lines.Add("I?eiyoa no?iea:"+ Copy(Tmp,1,EndStr-1));
   Delete(Tmp,1,EndStr+1);
 end;
until Len=0;


 Len := Socket.ReceiveLength;
нужно вынести за пределы цикла.

Len := Socket.ReceiveLength;
Repeat
 Tmp:=Tmp+Socket.ReceiveText;
 EndStr := Pos(#13#10,Tmp);
 if EndStr>0 then
 begin
   Memo2.Lines.Add("I?eiyoa no?iea:"+ Copy(Tmp,1,EndStr-1));
   Delete(Tmp,1,EndStr+1);
 end;
until Len=0;


Socket.Free; - убери.


 
Alexander Panov ©   (2005-08-03 00:49) [17]

А вообще, в этом форуме уже были примеры.
Например, здесь:
http://delphimaster.net/view/6-1122031924/


 
0n!k ©   (2005-08-03 14:30) [18]

Alexander Panov ОГРОМНОЕ СПАСИБО!!

Супер чел!



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.043 c
3-1128083929
isasa
2005-09-30 16:38
2005.11.13
MS SQL server и подключение пользовательских функций


1-1129742445
555
2005-10-19 21:20
2005.11.13
Перехват прокручивания скролла мыши.


2-1130349637
XeON
2005-10-26 22:00
2005.11.13
Как скрыть главную форму?


2-1129658185
Darkwing
2005-10-18 21:56
2005.11.13
Можно ли создать БД не имея готовых файлов (исп. TTable и BDE)


2-1130156596
XfroSt
2005-10-24 16:23
2005.11.13
Работа с датой