Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

Посылка 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;
Скачать: [xml.tar.bz2];

Наверх




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


2-1130341177
Dudee
2005-10-26 19:39
2005.11.13
Ещё одна беда со StringGrid ом


2-1129799356
Gear
2005-10-20 13:09
2005.11.13
Как сделать главную форму без рамки но...


4-1126700173
XGarik
2005-09-14 16:16
2005.11.13
Копирование данных с ПК на КПК


4-1126507725
Ландграф Павел
2005-09-12 10:48
2005.11.13
Перехват всех критических ситуаций (ошибок) в приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский