![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как скачать страницу [D7, Win2k, WinXP]
Anonimus © (2004-12-06 20:08:00)Добрый вечер.
Как скачать веб-страницу и сохранить ее в файл?
Заранее спасибо.
Rouse_ (2004-12-14 09:31:00) [1]Вот еще вариант через WinInet:
////////////////////////////////////////////////////////////////////////////////
//
// Демо получения HTML кода страницы
// Автор: Александр (Rouse_) Багель
// © Fangorn Wizards Lab 1998 - 2003
// 19 января 2003
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Wininet, StdCtrls;
const
HTTP_PORT = 80;
CRLF = #13#10;
Header = 'Content-Type: application/x-www-form-urlencoded' + CRLF;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function DelHttp(URL: String): String;
begin
if Pos('http://', URL) > 0 then Delete(Url, 1, 7);
Result := Copy(Url, 1, Pos('/', Url) - 1);
if Result = '' then Result := URL + #0;
end;
function GetUrl(const URL: String): String;
var
FSession, FConnect, FRequest: HINTERNET;
FHost, FScript, SRequest: String;
Ansi: PAnsiChar;
Buff: array [0..1023] of Char;
BytesRead: Cardinal;
Res, Len: DWORD;
begin
Result := '';
// Небольшой парсинг
// вытаскиваем имя хоста и параметры обращения к скрипту
FHost := DelHttp(Url);
FScript := Url;
Delete(FScript, 1, Pos(FHost, FScript) + Length(FHost));
//FScript := FHost + '/' +FScript;
// Инициализируем WinInet
FSession := InternetOpen('DMFR', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if not Assigned(FSession) then Exit;
try
// Попытка соединения с сервером
FConnect := InternetConnect(FSession, PChar(FHost), HTTP_PORT, nil,
'HTTP/1.0', INTERNET_SERVICE_HTTP, 0, 0);
if not Assigned(FConnect) then Exit;
try
// Подготавливаем запрос страницы
Ansi := 'text/*';
FRequest := HttpOpenRequest(FConnect, 'GET', PChar(FScript), 'HTTP/1.1',
nil, @Ansi, INTERNET_FLAG_RELOAD, 0);
if not Assigned(FConnect) then Exit;
try
// Добавляем заголовки
if not (HttpAddRequestHeaders(FRequest, Header, Length(Header),
HTTP_ADDREQ_FLAG_REPLACE or
HTTP_ADDREQ_FLAG_ADD or
HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA)) then Exit;
// Проверяем запрос:
Len := 0;
Res := 0;
SRequest := ' ';
HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
if Len > 0 then
begin
SetLength(SRequest, Len);
HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
end;
Form1.Memo2.Lines.Text := SRequest;
// Отправляем запрос
if not (HttpSendRequest(FRequest, nil, 0, nil, 0)) then Exit;
// Получаем ответ
FillChar(Buff, SizeOf(Buff), 0);
repeat
Result := Result + Buff;
FillChar(Buff, SizeOf(Buff), 0);
InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
until BytesRead = 0;
finally
InternetCloseHandle(FRequest);
end;
finally
InternetCloseHandle(FConnect);
end;
finally
InternetCloseHandle(FSession);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := GetUrl(' http://forum.sources.ru/index.php?showforum=14');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := GetUrl(' http://forum.sources.ru/');
end;
end.
PZ (2004-12-12 19:12:00) [2]Посмотрите мой ответ на Вопрос "Загрузка текста из интернета" 06.12.04.из раздела "Основная". Только вместо Outertext надо писать outerHTML
Sirgey (2004-12-11 22:58:00) [3]Сории что вклиниваюсь, но у меня данные по запросу не приходят (попробуйте сами : http://www.globoxchange.com) причём именно от туда! Служба поддержки говорит что это не их проблема. Не знаете что делать?
Anonimus (2004-12-07 10:24:00) [4]Большое спасибо
Zahar (2004-12-06 21:32:00) [5]INDY (Internet Direct)
Тебе нужен HTTP клиент - IdHTTP.
Anonimus (2004-12-06 20:44:00) [6]А что, indy & http как-то связаны? Сорри за глупый вопрос...
Zahar (2004-12-06 20:39:00) [7]См. IndyClients
Anonimus (2004-12-06 20:31:00) [8]Ну так вот и вопрос : где взять IdHTTP1 , в смысле на какой закладке палитры ?
Zahar (2004-12-06 20:15:00) [9]Импровизируй на тему:
Memo1.SaveToFile(IdHTTP1.Get(URL));