|
кто знает дельфи, прошу помочь |
|
13.08.2008, 16:47
|
#1
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
кто знает дельфи, прошу помочь
хочу чтобы программа сохраняла исходник php страницы в формате txt. как сделать? нужно для одной своей программы
п.с. ссылка например вот так www.какой-то-сайт.ru/блабла/нужная_страница.php
|
|
|
13.08.2008, 17:01
|
#2
|
Постоялец
Googleman вне форума
Регистрация: 12.08.2008
Сообщений: 762
|
для этого наверное все в ручняк придется делать. тоесть HTTP-заголовки попробуй.
|
|
|
|
|
|
13.08.2008, 18:11
|
#3
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
вот нашол на Delphi Russian Knowledge Base, думаете прокатит? чо то ваще не понял, куда он сохраняет, как сохраняет и.т.д.
Как скачать любой URL используя стандартные настройки сети?
Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.
Ниже приведён пример использования этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д.
Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.
Code:
function DownloadFile(const Url: string): string;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
Buffer: array[0..1024] of char;
BytesRead: cardinal;
begin
Result := '';
NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then
begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
{ UrlHandle правильный? Начинаем загрузку }
begin
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Result := Result + Buffer;
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end
else
begin
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
raise Exception.CreateFmt('Cannot open URL %s', [url]);
end;
InternetCloseHandle(NetHandle);
end
else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
raise Exception.Create('Unable to initialize Wininet');
end;
©Drkb::03577 Взято из http://forum.sources.ru
Последний раз редактировалось LegeN, 15.08.2008 в 03:05.
Причина: хз
|
|
|
|
16.08.2008, 15:27
|
#4
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
ну ладно, сам нашол что делать, исходник php сохраняет через webbrowser, минусы, долго грузится ie6.0, зато код простой ;)
теперь еще одна проблема: как дельфи дать понять что загрузка страницы в webrowser окончена? delphi используется 7
|
|
|
23.08.2008, 19:17
|
#5
|
Постоялец
Googleman вне форума
Регистрация: 12.08.2008
Сообщений: 762
|
попробуй использовать событийную модель виндоус. имхо самое простое.
|
|
|
23.08.2008, 19:18
|
#6
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
и как это сделать? можеш подсказать? ;)
|
|
|
23.08.2008, 21:07
|
#7
|
Постоялец
wchk вне форума
Регистрация: 15.08.2005
Сообщений: 953
|
если тег <html> закрылся значит страница кончилась.
|
|
|
23.08.2008, 21:47
|
#8
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
не, не в том смысле. просто прога при нажатии на кнопку "вычислить" делает порядок действий:
1) в спрятанном webbrowser, открывает там нужную страницу,
2) |и нужно узнать тут что загрузка страницы закончилась|,
3) и сохраняет его исходник в txt или в спрятанный memo или в переменную какую нибудь,
4) потом ищет там данные в исходнике,
5) выводит на экран результат .
самое обломное чтобы проверить что там чтото есть, если например соед. с инетом нету, там пусто окажется и программа выдаст ошибку, если не успеет ничего не загрузить, то тоже ошибка... если сделать через определенное время, например после нажатия на кнопку 10секунд, возможно тоже нету соед с инетом, или не успеет ничего загрузить (всякое может быть, нагруженный инет, медленная скорость, и т.п.)...
|
|
|
24.08.2008, 02:27
|
#9
|
Постоялец
Googleman вне форума
Регистрация: 12.08.2008
Сообщений: 762
|
property OnDocumentComplete: TWebBrowserDocumentComplete;
создай обработчик для этошо события. после выполнения навигэйт в браузере и окончания загрузки оно сгенерируется. толкьо учти, если документ содержит много фреймов, то вызван обработчик будет для каждого фрейма.
|
|
|
24.08.2008, 09:53
|
#10
|
Местный житель
LegeN вне форума
Регистрация: 17.07.2008
Сообщений: 2,559
|
спасибо. а блин, много там фреймов кажется... а пофигу, можно их и посчитать )) сегодня вечером буду пытать и отпишусь о результатах!
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +9, время: 17:58. |
|
|