кто знает дельфи, прошу помочь
хочу чтобы программа сохраняла исходник php страницы в формате txt. как сделать? нужно для одной своей программы :)
п.с. ссылка например вот так www.какой-то-сайт.ru/блабла/нужная_страница.php |
для этого наверное все в ручняк придется делать. тоесть HTTP-заголовки попробуй.
|
вот нашол на 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 |
ну ладно, сам нашол что делать, исходник php сохраняет через webbrowser, минусы, долго грузится ie6.0, зато код простой ;)
теперь еще одна проблема: как дельфи дать понять что загрузка страницы в webrowser окончена? delphi используется 7 |
попробуй использовать событийную модель виндоус. имхо самое простое.
|
и как это сделать? можеш подсказать? ;)
|
если тег <html> закрылся значит страница кончилась.
|
не, не в том смысле. просто прога при нажатии на кнопку "вычислить" делает порядок действий:
1) в спрятанном webbrowser, открывает там нужную страницу, 2) |и нужно узнать тут что загрузка страницы закончилась|, 3) и сохраняет его исходник в txt или в спрятанный memo или в переменную какую нибудь, 4) потом ищет там данные в исходнике, 5) выводит на экран результат :). самое обломное чтобы проверить что там чтото есть, если например соед. с инетом нету, там пусто окажется и программа выдаст ошибку, если не успеет ничего не загрузить, то тоже ошибка... если сделать через определенное время, например после нажатия на кнопку 10секунд, возможно тоже нету соед с инетом, или не успеет ничего загрузить (всякое может быть, нагруженный инет, медленная скорость, и т.п.)... |
property OnDocumentComplete: TWebBrowserDocumentComplete;
создай обработчик для этошо события. после выполнения навигэйт в браузере и окончания загрузки оно сгенерируется. толкьо учти, если документ содержит много фреймов, то вызван обработчик будет для каждого фрейма. |
спасибо. а блин, много там фреймов кажется... а пофигу, можно их и посчитать :))) сегодня вечером буду пытать и отпишусь о результатах!
|
пытал пытал, ничо не получилось с этим %(. решил подругому сделать, и почти получился желаемый результат, через try и except ;) если не успеет загрузить страницу в течение 5 сек, то прога выдает, "повторите попытку позднее" :) еще сделаю чтоб настраивалась эта опция, типа увеличить время в настройках или добавить "повторить попытку сейчас".
. . . . АП |
Цитата:
|
Часовой пояс GMT +9, время: 01:44. |
Powered by vBulletin® Version 3.6.3
Copyright ©2000 - 2024, Якутск-Online. Перевод: zCarot