Получение данных из интернест страницы.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Chicaho
Сообщения: 5
Зарегистрирован: 08 янв 2006, 14:12
Откуда: Москва

Как я могу получить содержимое страницы, находящейся на удаленном узле. Есть ли функции, позволяющие обрабатывать файлы не находящиеся на локальном компьютере, как стандартные функции для работы с файлами. Работа введется в среде разработки Borland C++.
Сплин,Остаёмся Зимовать писал(а):... даже странно,
Я не знаю что сказать...
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Если удалённый компьютер является HTTP-сервером, то можно по протоколу HTTP получать данные. В Win32API есть соответствующие функции, есть системный компонент IHttpRequest. Можно по протоколу TCP через сетевые сокеты, но это уже более низкий уровень. А в Borland C++ Builder или Delphi есть готовые компоненты VCL для работы по протоколу HTTP или TCP.
Chicaho
Сообщения: 5
Зарегистрирован: 08 янв 2006, 14:12
Откуда: Москва

Как вообще пользоваться протоколами. Я в этом ничего не понимаю. Посовеуйте, пожалуйста, какие нибуть книги.
Но это ОффТоп.

А по теме : Я беру данные по Http с обычной Вэб-страницы.
Сплин,Остаёмся Зимовать писал(а):... даже странно,
Я не знаю что сказать...
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

О работе с сетевыми протоколами нужно читать в соответствующих книгах.
А вот небольшой пример на Visual C++, в котором данные с веб-страницы сохраняются в на диске в файл.

Код: Выделить всё

#include "stdafx.h"
#include <fstream.h>
#include <iostream.h>

#import "C:\WINNT\system32\winhttp.dll" no_namespace, raw_interfaces_only

struct _COINITIALIZE
{
	 _COINITIALIZE()	{::CoInitialize(NULL);}
	~_COINITIALIZE()	{::CoUninitialize();}
};

int main(int argc, char* argv[])
{
	struct _COINITIALIZE co_init;

	IWinHttpRequestPtr pWHR(__uuidof(WinHttpRequest));
	if ( SUCCEEDED( pWHR->Open( _bstr_t(L"GET"), _bstr_t(L"http://www.yandex.ru") ) ) )
	{
		if (SUCCEEDED(pWHR->Send()))
		{
			long lStatus = 0;
			BSTR header = 0, body = 0, status = 0;

			pWHR->get_Status(&lStatus);
			pWHR->get_StatusText(&status);
			pWHR->GetAllResponseHeaders(&header);
			pWHR->get_ResponseText(&body);
			
			// Вывод результата на консоль...
			cout << lStatus << " " << (char*)_bstr_t(status) << endl;
			cout << (char*)_bstr_t(header) << endl;

			// Запись данных страницы в файл...
			ofstream fout("yandex.html");
			fout << (char*)_bstr_t(body);
			fout.close();

			::SysFreeString(body);
			::SysFreeString(status);
			::SysFreeString(header);
		}
	}

	pWHR.Release();

	return 0;
}
Chicaho
Сообщения: 5
Зарегистрирован: 08 янв 2006, 14:12
Откуда: Москва

WinMain писал(а): О работе с сетевыми протоколами нужно читать в соответствующих книгах.
Например в каких? Посоветуйте.
Сплин,Остаёмся Зимовать писал(а):... даже странно,
Я не знаю что сказать...
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Да их много разных книг по TCP/IP, они примерно так и называются, что-то типа "Протоколы TCP/IP". Ты на Олимпийскмй съездий и спроси у тех, кто компьютерной литературой торгует, они тебе предложат. Или в "Библио-глобус" на Мясницкой, там тоже большой выбор литературы по программированию.

А если тебе на C++ Builder нужно к веб-серверу обращаться, то в нём должен быть уже готовый компонент, что-то типа THttpClient.
Ответить