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

Вниз

Помогите с TClientSocket, замучался уже...   Найти похожие ветки 

 
ppcumax ©   (2007-04-14 13:09) [0]

ну что я делаю не правильно, я просто хочу получить HTML код страницы в Memo1

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   Skt: TClientSocket;
   procedure Button1Click(Sender: TObject);
   procedure SktRead(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Skt.Host := "vingrad.ru";
Skt.Port := 80;
Skt.Open;
end;

procedure TForm1.SktRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Text := Memo1.Lines.Text + Socket.ReceiveText;
end;

end.


 
grisme ©   (2007-04-14 13:20) [1]

а запрос кто будет посылать? ) нужно отправить такую строку "GET / /HTTP/1.1"+Сhr(13)+Chr(10)+Chr(13)+Chr(10) это для index-страницы, которая лежит в корне хоста. для других, первый слеш превратится в путь


 
ppcumax ©   (2007-04-14 13:36) [2]

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := "rambler.ru";
ClientSocket1.Port := 80;
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Socket.SendText("GET http://rambler.ru/ HTTP 1.1"#10);
end;

сделал так, но все равно не работает, выдает:

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.5.17</center>
</body>
</html>


 
grisme ©   (2007-04-14 13:49) [3]

хе хе ) http://rambler.ru/ - это адрес для браузера. у тебя СВОЙ "браузер", т.е. то, что ты подключаешься к 80 порту и есть то самое http:// , а то что ты прописал в ClientSocket1.Host - это и есть это rambler.ru ) сделай запрос таким:
GET / /HTTP/1.1
ты получишь главную страницу rambler.


 
grisme ©   (2007-04-14 13:52) [4]

т.е. ты подключился уже к рамблеру(отлов exceptions опустим), не надо ему говорить еще раз, что хочешь к рамблеру в гости. прикинь, приходишь в гости к другу и сообщаешь ему что хочешь в гости к Имя_Фамилия_друга :) достаточно просто запросить корень на HTTP-сервере, а корень и есть "/"


 
ppcumax ©   (2007-04-14 13:55) [5]

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := "rambler.ru";
ClientSocket1.Port := 80;
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Socket.SendText("GET / /HTTP/1.1");
end;

в ответ получаю:

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.5.17</center>
</body>
</html>

а, и еще вопрос, как можно одновременно запустить несколько сокетов


 
grisme ©   (2007-04-14 14:02) [6]

товарищчь, нужно завершать запросы HTTP-протокола ПАРОЙ CRLF(#13#10), а у тебя ниодной ;)

по поводу сокетов. динамически создавать объекты класса TClientSocket и все )

что-то начали терзать смутные сомнения, а уж не сканнер ли ты собрался делать? :P


 
ppcumax ©   (2007-04-14 14:19) [7]

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := "rambler.ru";
ClientSocket1.Port := 80;
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Socket.SendText("GET / /HTTP/1.1" + #13#10);
end;

результат тотже


 
ppcumax ©   (2007-04-14 14:24) [8]

>что-то начали терзать смутные сомнения, а уж не сканнер ли ты собрался делать?

нет, не сканер

привожу полный код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Button1: TButton;
   ClientSocket1: TClientSocket;
   procedure Button1Click(Sender: TObject);
   procedure ClientSocket1Write(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host := "rambler.ru";
ClientSocket1.Port := 80;
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Socket.SendText("GET / /HTTP/1.1" + #13#10);
end;

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

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket1.Close;
end;

end.


 
Romm ©   (2007-04-14 14:52) [9]

{
Присоедините следующий обработчик к Вашему TClientSocket.
Он получает файл с сервера и помещает его в строковую переменную
FText string variable. Однако он не убирает заголовок, который
так же посылается вебсервером.

Не забудьте задать правильный адрес сервера в объекте Socket.
Установите порт 80. А затем откройте его при помощи команды
"Socket.Open;".

Автор: E.J.Molendijk
}

const
 WebPage = "/index.html";
var
 FText: string;

procedure TForm1.SocketWrite(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Socket.SendText("GET " + Webpage + " HTTP/1.0"#10#10);
end;

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

procedure TForm1.SocketConnecting(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 FText := "";
end;

procedure TForm1.SocketDisconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 { --- }
 { ЗДЕСЬ ВЫ МОЖЕТЕ ОБРАБАТЫВАТЬ ВАШ FText !!! }
 { --- }
end;

procedure TForm1.SocketError(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 ErrorCode := 0; { Ошибки игнорируем }
end;


 
ppcumax ©   (2007-04-14 15:01) [10]

у меня этот пример не работает, точнее если index.html на локалхосте, тогда работает, а  какая-то страница в интернете - не хочет. Bad Request


 
Romm ©   (2007-04-14 16:03) [11]

Не забудьте задать правильный адрес сервера в объекте Socket
не забыл?



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

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

Наверх




Память: 0.5 MB
Время: 0.022 c
15-1175797825
alexsis
2007-04-05 22:30
2007.05.06
Безобразие!


2-1176885518
Neket
2007-04-18 12:38
2007.05.06
Excel в Потоке


2-1176625469
ari_9
2007-04-15 12:24
2007.05.06
не могу сделать Run из Delphi, хотя собранный .exe работает


2-1176831228
Riply
2007-04-17 21:33
2007.05.06
CreateNamedPipe. Использование OutBufferSize и InBufferSize.


2-1176454419
ALS
2007-04-13 12:53
2007.05.06
Access и региональные настройки