Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.
HTTP-клиент

В этой статье рассказывается как создать обычное консольное приложение, которое будет выполнять роль HTTP-клиента. результат их работы выводится на экран. Можно, однако, перенаправить его в файл с расширением .html и посмотреть при помощи какого-нибудь браузера. Вот простой пример HTTP-клиента:

// HTTPClient.cpp : Defines the entry point for the console application.
 
 //
 
 
 
 #include "stdafx.h"
 
 #include "HTTPClient.h"
 
 #include <afxinet.h>
 
 #ifdef _DEBUG
 
 #define new DEBUG_NEW
 
 #endif
 
 
 
 CWinApp theApp;
 
 
 
 using namespace std;
 
 
 
 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 
 {
 
 	int nRetCode = 0;
 
 
 
 	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
 
 	{
 
 		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
 
 		nRetCode = 1;
 
 	}
 
 	else
 
 	{
 
 		CInternetSession ses;
 
 		CHttpConnection * con;
 
 		CHttpFile * file1=NULL;
 
 		INTERNET_PORT port=80;
 
 		const bufmax=10000;
 
 		char buf[bufmax];
 
 		int rec;
 
 		try
 
 		{
 
 			//соединение с Web-сервером
 
 			con=ses.GetHttpConnection("localhost/P-Lib",port);
 
 			//определяем запрос
 
 			file1=con->OpenRequest(1, "index.htm");
 
 			//послать запрос
 
 			file1->SendRequest();
 
 			do
 
 			{
 
 				//читаем порцию или всю
 
 				rec=file1->Read(buf,bufmax-1);
 
 				buf[rec]='\0';
 
 				printf("%s",buf);
 
 			}while(rec>0);
 
 		}
 
 		catch(CInternetException *pe)
 
 		{
 
 			printf("Error!\n");
 
 			return -1;
 
 		}
 
 		con->Close();
 
 		delete file1;
 
 	}
 
 	return nRetCode;
 
 }
 
 

Центральными в данной программе являются классы, объекты которые задаются в следующих строках:

CInternetSession ses;
 
 CHttpConnection * con;
 
 CHttpFile * file1=NULL;

Класс CInternetSession, как обычно играет центральную роль. В строке:

con=ses.GetHttpConnection("localhost/P-Lib",port);

создаётся объект *con. Допустим если взять FTP-сервер, то эта строка не осуществляет реального соединения с HTTP-сервером. Реальное соединение осуществляется после успешного выполнения этих строк:

file1=con->OpenRequest(1, "index.htm");
 
 file1->SendRequest();

В результате успешного выполнения этих строк создаётся объект *file1, который и используется в дальнейшем для получения информации с HTTP-сервера.

Представлю ещё один HTTP-клиент, который использует другие методы взаимодействия с сервером:

// HTTPClient2.cpp : Defines the entry point for the console application.
 
 //
 
 
 
 #include "stdafx.h"
 
 #include "HTTPClient2.h"
 
 #include <afxinet.h>
 
 #ifdef _DEBUG
 
 #define new DEBUG_NEW
 
 #endif
 
 
 
 CWinApp theApp;
 
 
 
 using namespace std;
 
 
 
 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 
 {
 
 	int nRetCode = 0;
 
 
 
 	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
 
 	{
 
 		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
 
 		nRetCode = 1;
 
 	}
 
 	else
 
 	{
 
 		CInternetSession ses;
 
 		CStdioFile* file1=NULL;
 
 		const bufmax=10000;
 
 		char buf[bufmax];
 
 		int rec;
 
 		char iname[100];
 
 		//имя WEB-объекта
 
 		gets(iname);
 
 		try
 
 		{
 
 			//открываем URL
 
 			file1=ses.OpenURL(iname,0,
 
 			INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_KEEP_CONNECTION);
 
 			do
 
 			{
 
 				//чтение страници
 
 				rec=file1->Read(buf,bufmax-1);
 
 				buf[rec]='\0';
 
 				printf("%s",buf);
 
 			}while(rec>0);
 
 		}
 
 		catch(CInternetException *pe)
 
 		{
 
 			printf("Error!\n");
 
 			return -1;
 
 		}
 
 		delete file1;
 
 	}
 
 	return nRetCode;
 
 }

В программе представлен более простой механизм взаимодействия с HTTP-сервером. Он основан на том, что метод OpenURL класса CInternetSession возвращает указатель на объект класса CStdioFile. Если запрос ресурса прошёл успешно, то образуется объект класса CStdioFile, с помощью метода Read которого можно читать ресурс.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS