Карта0
Карта1
Карта2
Карта3
Карта4
Карта5
Карта6
Карта7
Карта8
Карта9
Карта10
Карта11
Карта12
Карта13
Карта14
Карта15
Карта16
Карта17
Карта18
Карта19
Карта20
Карта21
Карта22
Карта23
Карта24
Карта25
Карта26
Карта27
Карта28
Карта29
Карта30
Карта31
Карта32
Карта33
Карта34
Карта35
Карта36
Карта37
Карта38
Карта39


Наш форум » Железо и софт. Вопросы и ответы. » Программирование » WebBrowser

Ответ
Старый 04.01.2008, 19:50   #1 (permalink)
МСП, NGN, ВОСП
 
Аватар для Master
 
Регистрация: 07.02.2007
Возраст: 25
Сообщений: 155
Репутация: 7
Провайдер: Мультинекс
WebBrowser


Хочу написать программу WebBrowser, который после обновления страницы, определял, была ли она изменена.
Думал так - при обновлении страницы, копирую её содержимое, и сравниваю её с обновлённой.
Как скопировать содержимое? Пытался использовать компонент Webbrowser в Делфи.
Master вне форума   Ответить с цитированием
Старый 04.01.2008, 21:32   #2 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Да уж, совсем Дельфи людей головой думать отучил! Привычка использовать все готовое никак не способствует ни техническому прогрессу, ни, что самое страшное, собственному образованию.
Это - личное мнение старого программиста, так что без обид.

Не знаю, как работает этот компонент, но, думаю, что в куче его свойств есть отвечающее за текстовое содержимое полученной страницы. Которое ты можешь сравнивать с сохраненным ранее и принимать решение об изменении страницы.

Без лишнего шума содержимое страницы можно получить, используя Internet API. Для этого надо открыть MSDN и внимательно читать про функции InternetOpen, InternetOpenUrl, InternetQueryDataAvailable, InternetReadFile, InternetCloseHandle. Так можешь скачать страничку целиком, сохранить в массив, в файл, переписать на бумажку с экрана, и сравнивать как пожелаешь.

Можно сделать еще проще, но для этого надо немного почитать про протокол HTTP 1.0. А именно: используя тот же API, отправляем на сервер запрос, в заголовке которого пишем If-Modified-Since: Fri, 04 Jan 2008 21:30:00 GMT и читаем его ответ. В ответ получим либо HTTP/1.0 304 Not Modified, либо HTTP/1.0 200 OK и саму страницу.
Grand Father вне форума   Ответить с цитированием
Старый 04.01.2008, 22:23   #3 (permalink)
МСП, NGN, ВОСП
 
Аватар для Master
 
Регистрация: 07.02.2007
Возраст: 25
Сообщений: 155
Репутация: 7
Провайдер: Мультинекс


Цитата:
Сообщение от Grand Father

Можно сделать еще проще, но для этого надо немного почитать про протокол HTTP 1.0. А именно: используя тот же API, отправляем на сервер запрос, в заголовке которого пишем If-Modified-Since: Fri, 04 Jan 2008 21:30:00 GMT и читаем его ответ. В ответ получим либо HTTP/1.0 304 Not Modified, либо HTTP/1.0 200 OK и саму страницу.
Можешь поподробнее написать про последнее?
Как отправлять запрос, как его получить? Или дай ссылку с подробным описанием (или сам напиши пример, если не трудно).
Просто программированием я вообще не занимаюсь, писал тока раньше небольшии программы для расчёта чего-либо, а с api функциями никогда не сталкивался.
Master вне форума   Ответить с цитированием
Старый 04.01.2008, 23:10   #4 (permalink)
Sky
Child of Darkness
 
Аватар для Sky
 
Регистрация: 24.02.2007
Адрес: 2 Железнодорожная, д.38
Возраст: 22
Сообщений: 771
Репутация: 22


Поищи здесь: http://delphikingdom.ru/asp/itemq.asp?ItemID=44
__________________
http://sky.62live.ru/
ftp://sky.62live.ru/
Sky вне форума   Ответить с цитированием
Старый 05.01.2008, 11:28   #5 (permalink)
Местный
 
Аватар для Grand Father
 
Регистрация: 03.03.2007
Адрес: Москва, Люблино
Возраст: 33
Сообщений: 946
Репутация: 132
Провайдер: Другой


Вот кусок кода, который читает страницу по заданному URL и сохраняет ее в файл. Разобраться здесь не трудно. Как и в прошлый раз советую внимательно читать MSDN, без него точно ничего не получится.

Код:
void GetInfo(char *url)
{
	HINTERNET    hRootHandle, hOpenUrlHandle;
	DWORD	       dwSize = 0, dwDownloaded = 0;
	LPTSTR	       lpszData;
	HANDLE	       h;
	DWORD	       bytes;
	BOOL           x;

	hRootHandle = InternetOpen("Viewer", 
                       INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
	hOpenUrlHandle = InternetOpenUrl(hRootHandle, url, NULL, 0,
		INTERNET_FLAG_RAW_DATA, 0);

	while (1)
	{
		x = InternetQueryDataAvailable(hOpenUrlHandle, 
                                            &dwSize, 0, 0);
		if (dwSize == 0 || !x) break;
		lpszData = new TCHAR[dwSize+1];
		InternetReadFile(hOpenUrlHandle, (LPVOID)lpszData,  
                                             dwSize, &dwDownloaded);
		lpszData[dwDownloaded] = '\0';
		if (dwDownloaded == 0) break;

		h = CreateFile("file.txt", GENERIC_WRITE, 0, 0, 
                                   OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
		SetFilePointer(h, 0, 0, FILE_END);
		WriteFile(h, lpszData, dwDownloaded, &bytes, 0);
		CloseHandle(h);
		delete []lpszData;
	}

	InternetCloseHandle(hOpenUrlHandle);
	InternetCloseHandle(hRootHandle);
}
Grand Father вне форума   Ответить с цитированием
Ответ




Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



плитка cir serenissima http://www.italker.ru/
При копировании информации ссылка на источник обязательна!

Часовой пояс GMT +4, время: 04:12.
vBulletin® Version 3.8.2.Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot
Template-Modifications by TMS