В этой статье рассказывается как создать обычное консольное приложение, которое будет выполнять роль 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 которого можно читать ресурс. |