Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Получение HTML кода в Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Получение HTML кода в Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Получение HTML кода в Delphi - 2009-05-26 17:40:54.043333   
Qb1024

Сообщений: 98
Оценки: 0
Присоединился: 2009-02-13 21:22:06.990000
Подскажите функцию, чтобы на входе был url а на выходе string с кодом.
Гуглем перерыл много сайтов, но там как-то всё замудрённо.
Post #: 1
RE: Получение HTML кода в Delphi - 2009-05-26 17:49:56.586666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
quote:



uses WinInet

function DownloadURL(const aUrl: string): Boolean;
var
&nbsp; hSession: HINTERNET;
&nbsp; hService: HINTERNET;
&nbsp; lpBuffer: array[0..1024 + 1] of Char;
&nbsp; dwBytesRead: DWORD;
begin
&nbsp; Result := False;
&nbsp; // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
&nbsp; hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
&nbsp; try
&nbsp;&nbsp;&nbsp; if Assigned(hSession) then
&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Assigned(hService) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while True do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwBytesRead := 1024;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if dwBytesRead = 0 then break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpBuffer[dwBytesRead] := #0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.Memo1.Lines.Add(lpBuffer);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result := True;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternetCloseHandle(hService);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;
&nbsp;&nbsp;&nbsp; end;
&nbsp; finally
&nbsp;&nbsp;&nbsp; InternetCloseHandle(hSession);
&nbsp; end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
&nbsp; DownloadURL('http://www.google.com');
end;


В Memo1 будет сорец страницы.
Post #: 2
RE: Получение HTML кода в Delphi - 2009-05-27 15:04:56.836666   
Qb1024

Сообщений: 98
Оценки: 0
Присоединился: 2009-02-13 21:22:06.990000
Спасибо, в целом работает. Но возникла такая проблема: при нажатии кнопки получаю точно такой же код, хотя на исходном сайте он давно обновился.
Вот сам код с этой процедурой, как сделать, чтобы результаты были разные?
На сайте обновляется раз в 10 секунд.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, WinInet; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; function NeMoyaFuncia(const aUrl: string):Boolean; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.NeMoyaFuncia(const aUrl: string): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead: DWORD; begin Result := False; // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0); if Assigned(hService) then try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); if dwBytesRead = 0 then break; lpBuffer[dwBytesRead] := #0; Form1.Memo1.Lines.Add(lpBuffer); end; Result := True; finally InternetCloseHandle(hService); end; end; finally InternetCloseHandle(hSession); end; end; procedure TForm1.Button1Click(Sender: TObject); begin NeMoyaFuncia('http://bash.org.ru/forweb'); end; end.
Post #: 3
RE: Получение HTML кода в Delphi - 2009-05-27 15:51:55.550000   
Sunzеr

Сообщений: 79
Оценки: 0
Присоединился: 2008-12-02 16:21:02.986666
Не понял вопроса. Хочешь что бы код обновлялся каждые 10 секунд? Поставь таймер тогда.
Post #: 4
RE: Получение HTML кода в Delphi - 2009-05-28 00:35:48.756666   
Qb1024

Сообщений: 98
Оценки: 0
Присоединился: 2009-02-13 21:22:06.990000
нет, прога выдаёт одно и тоже прит повторном использовании функции, хотя исходник на сайте сменился
Post #: 5
RE: Получение HTML кода в Delphi - 2009-05-28 02:37:21.820000   
FLIER

Сообщений: 628
Оценки: 0
Присоединился: 2007-08-29 01:31:15.400000
Советую почитать: http://parsing-and-i.blogspot.com/
Post #: 6
RE: Получение HTML кода в Delphi - 2009-05-28 16:24:23.626666   
Sunzer

Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
quote:

function DownloadURL_NOCache(const aUrl: string; var s: String): Boolean;
var
hSession: HINTERNET;
hService: HINTERNET;
lpBuffer: array[0..1024 + 1] of Char;
dwBytesRead: DWORD;
begin
Result := False;
s := '';
hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(hService) then
try
while True do
begin
dwBytesRead := 1024;
InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
if dwBytesRead = 0 then break;
lpBuffer[dwBytesRead] := #0;
s := s + lpBuffer;
end;
Result := True;
finally
InternetCloseHandle(hService);
end;
end;
finally
InternetCloseHandle(hSession);
end;
end;


var
s: String;
begin
if DownloadURL('http://www.swissdelphicenter.ch/', s) then
ShowMessage(s);
end;
Post #: 7
RE: Получение HTML кода в Delphi - 2009-05-28 16:30:54.860000   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000

quote:

ORIGINAL: FLIER

Советую почитать: http://parsing-and-i.blogspot.com/

Спасибо, хорошая ссылка.
Post #: 8
RE: Получение HTML кода в Delphi - 2009-06-02 13:36:49.390000   
dos 999

Сообщений: 331
Оценки: 0
Присоединился: 2007-12-17 10:49:07.556666
В модуле UrlMon есть функции для решения подобный задач.
например:
  • функция URLDownloadToCacheFile получает данные из URL, записывает их в кэш-файл, поддерживаемый Internet-подсистемой ActiveX, и возвращает имя кэш-файла;
  • функция URLDownloadToFile получает данные из URL и записывает их в заданный файл;
  • функция URLOpenStream получает данные из URL и записывает их в поток (IStream);
  • функция URLOpenBlockingStream аналогична функции URLOpenStream, за исключением того, что поток возвращает управление лишь после окончания приема всех данных (то есть по отношению к вам она работает синхронно);
  • функция URLOpenPullStream аналогична функции URLOpenBlockingStream, за исключением того, что запросы чтения в поток не приводят к блокировке. [/ul] Uses &nbsp; UrlMon ... URLDownloadToFile(nil, 'http://forum.xakep.ru, '1.txt', 0, nil)


  • Post #: 9
    Страниц:  [1]
    Все форумы >> [Компилируемые языки] >> Получение HTML кода в Delphi







    Связаться:
    Вопросы по сайту / xakep@glc.ru

    Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.