Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как запросить страницу с сайта

Delphi , Интернет и Сети , Сокеты



Автор: Fantasist
WEB-сайт: http://forum.vingrad.ru

unit Unit1;

interface

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

const
  Request: AnsiString = 'GET / HTTP/1.1' + #0$D#0$A+
 'Accept: application/vnd.ms-excel, application/msword, */*' + #0$D#0$A+
   'Accept-Language: en-us' + #0$D#0$A+
   'Accept-Encoding: gzip, deflate' + #0$D#0$A+
   'User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)' + #0$D#0$A+
   'Host: vingrad.com' + #0$D#0$A+
   'Connection: Keep-Alive' + #0$D#0$A+#0$D#0$A;

type
TForm1 = class(TForm)
    Skt: TClientSocket;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure SktRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure SktConnect(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;

procedure TForm1.SktConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Socket.SendText(Request);
end;
end.

Request - это запрос который посылает мой IE5. В принципе, по протоколу HTTP он может ограничиваться: 'GET / HTTP/1.1'+#13+#13. Если хотите запросить оределенный документ: 'GET /<полный путь> HTTP/1.1'+#13+#13. Конечно, всегда можно воспользоваться готовыми компонентами.

Программа на Delphi использует компонент TClientSocket для отправки GET-запроса на веб-сайт и получения его содержимого. Программа создает форму с кнопкой и контролем Memo, и при нажатии кнопки открывает соединение с указанным хостом (vingrad.ru) на порту 80, отправляет HTTP-запрос и затем читает ответ от сервера.

Константа Request содержит форматированную строку, представляющую собой HTTP-запрос GET. Она включает в себя следующие заголовки:

  • Accept: указывает типы файлов, которые клиент может принять
  • Accept-Language: указывает язык, который предпочтит клиент
  • Accept-Encoding: указывает методы кодирования, поддерживаемые клиентом
  • User-Agent: указывает тип браузера и операционной системы, используемых клиентом
  • Host: указывает имя хоста сервера, запрашиваемого клиентом
  • Connection: указывает, что клиент хочет оставить соединение открытым

Программа использует эти заголовки для отправки GET-запроса на указанный URL. Ответ от сервера затем читается в контроле Memo, где он может быть отображен.

Некоторые предложения по улучшению программы:

  1. Используйте более надежный метод парсинга HTTP-ответа, например, регулярное выражение или специализированный парсер HTTP.
  2. Рассмотрите использование более современного и эффективного метода отправки HTTP-запросов, например, библиотеку TCP/IP или третьесторонний компонент, поддерживающий HTTP/1.1.
  3. Добавьте обработку ошибок для случаев, когда соединение не удается, сервер возвращает ошибочный ответ или происходит другая неожиданная ошибка.

В отношении вашего вопроса о том, как запросить конкретную страницу на веб-сайте, вы можете просто модифицировать константу Request, включив полный путь документа, который вы хотите получить, например:

const
  Request: AnsiString = 'GET /path/to/document HTTP/1.1' + #13#13;

Замените /path/to/document на актуальный URL страницы, которую вы хотите запросить.

Также стоит отметить, что программа использует устаревшую версию Internet Explorer (IE5) в качестве строки пользователя агента, что может привести к тому, что некоторые веб-сайты возвращают другой ответ или блокируют доступ. Вам может быть полезно использовать более современную и нейтральную строку пользователя агента вместо этого.

Статья описывает способ запроса страницы с сайта посредством программирования в Delphi, используя протокол HTTP и компонент TClientSocket.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сокеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:01:45/0.0059518814086914/0