C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
https://infpol.ru/239064-okrashennye-dveri-pod-lyuboy-interer/

 HTTP-клиент / Сетевые технологии / Сеть

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 которого можно читать ресурс.