VC实现简单Http连接

原创 2007年09月12日 23:35:00
一、引 言
---- Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 Berkeley Socket功能调用的集合,以及为Windows所作的重要扩充。 Windows Socket经过不断完善并在众 多公司的全力支持下,已成为Windows网络编程 的事实上的标准。

---- 本 文 将 在VC++ 5.0 环 境 下 介 绍 一个基于 Winsock 的 HTTP 客户应用程序。 读者可以基于本例 同样的原理实现其他Internet常用协议(time, SMTP, POP3, Telnet, FTP 等)的客户应用程序。

二、一个简单的浏览器
---- 我将创建一个简单的浏览器,以说明如何通过Winsock基于HTTP协议实现HTTP 客户应 用程序。

---- 首先我将创建一个帮助函数 LogFile(),该函数把传递给它的字符串写到磁盘文件 中。然后再创建 本示例的核心函数 -- HttpClient() 。在这个核心函数中,我将通 过 Winsock 连接到 HTTP 服务器上 (本例中我将使用计算机世界日报 168.160.224.185)。当连接成功后,发送 Get 命令到 HTTP 服务器 去下载指定路径 上(/99/tips/)的文件。通过帮助函数 LogFile() 把下载的数据记录到本地磁盘文 件中。

char fname[MAXPATH];
void LogFile(char *p)
{
FILE *fp=fopen(fname,"a+");
fprintf(fp,"%s/n",p);
fclose(fp);
}

BOOL HttpClient(void)
{
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;

int iResult;
long lResult;
char strSubAddr[100], strBuffer[100];

lResult = WSAStartup(0x0101,&ws);
s = socket(AF_INET,SOCK_STREAM,0);

addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr
("168.160.224.185"); // 计算机世界日报
iResult=connect(s,(struct sockaddr *)
&addr, sizeof(addr));
if(SOCKET_ERROR == iResult)
{
// 连接失败
WSACleanup();
return FALSE;
}
else {
// 连接成功
strcpy(strSubAddr, "GET /99/tips/ /r/n");
strcpy(fname, "index.htm");
iResult = send(s, strSubAddr,strlen(strSubAddr),0);

// 下载文件
do {
strset(strBuffer,' ');
iResult = recv(s,strBuffer,sizeof(strBuffer),0);
LogFile(strBuffer);
} while( iResult !=0 );
}

WSACleanup();
return TRUE;
}

三、测试
---- 打开Visual C++ 5.0, 用MFC创建基于对话框的工程Test, 并在对话框上放 置"Test" 按 钮, 然后添加测试代码。

Void CTestDlg::OnTest()
{
HttpClient();
}

---- 编译并运行该测试程序,在测试对话框中,单击 "Test" 按钮,

---- "http://www.computerworld.com.cn/99/tips/"的index.htm文件将被下载到本地。 
 

VC连接HTTP服务器 & MFC 处理 HTTP 请求的基本方法

1.AfxParseURL函数,该函数解析URL字符串并返回服务的类型及组件,包含在 afxinet.h 头文件中。  BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL...
  • shaderdx
  • shaderdx
  • 2014年06月04日 11:52
  • 4155

HTTPS的Socket实现代码

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputS...
  • xxb2008
  • xxb2008
  • 2014年04月24日 11:44
  • 6159

https VC实现的源代码

  • 2011年08月15日 14:33
  • 45KB
  • 下载

【开源】Https数据读取C++实现

一、基本实现           //HttpsData.h #include class CHttpsData { public: CHttpsData(); virtual ~CHttp...
  • sxyaxy
  • sxyaxy
  • 2014年03月05日 21:38
  • 6759

vc 发送http请求POST

void  HttpRequest(LPCTSTR  lpHostName,short sPort,LPCTSTR lpUrl,LPCTSTR lpMethod,LPCTSTR lpPostData,...
  • qdqht2009
  • qdqht2009
  • 2014年05月07日 16:43
  • 2181

VC通过HttpGet和HttpPost方式与WebService通信,解析返回的Json

  • 2011年12月03日 16:20
  • 398KB
  • 下载

VC使用Http Get方法获取页面内容

该函数可以用于读取指定页面信息。
  • mrxyz098
  • mrxyz098
  • 2014年06月01日 21:40
  • 10921

MFC发送HTTP请求

1 MFC 处理 HTTP 请求的基本方法 1.1 配置本地的 HTTP 服务器 为方便测试,可以先配置一个本地的 HTTP 服务器,根据各种需要进行定制。 我在这里,用 J...
  • a956602523
  • a956602523
  • 2016年03月22日 16:55
  • 2434

C++ 简单实现HTTP GET/POST 请求

HTTP(超文本传输协议)是一种客户端与服务端的传输协议,最早用于浏览器和服务器之间的通信,后来因为其使用灵活、方便等特点,广泛用于客户端与服务端的通信。文章将简单介绍HTTP协议,同时以C++方式分...
  • cwqcwk1
  • cwqcwk1
  • 2013年11月15日 18:38
  • 26632

VC++演示GET/POST发送请求的HTTP客户端

  • 2010年09月04日 12:18
  • 35KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC实现简单Http连接
举报原因:
原因补充:

(最多只允许输入30个字)