Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизПомогите с 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c