Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1176037330
Strate
2007-04-08 17:02
2007.05.06
Отладка с параметрами


3-1171613465
RomanH
2007-02-16 11:11
2007.05.06
Конструкция в ХП


2-1176565805
-=MaxDelphi=-
2007-04-14 19:50
2007.05.06
Сохранение файла


2-1176440052
Xmen
2007-04-13 08:54
2007.05.06
Что за ощибка?


15-1175927960
ArMellon
2007-04-07 10:39
2007.05.06
Как экспортировать ветку рееста в файл и обратно импортировать





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский