利用socket自己实现基于HTTP协议的Web客户端

一般我们最常使用的Web客户端就是我们的浏览器软件,现在我们来实现一个我们自己的Web客户端,对利用socket自己实现基于HTTP协议的Web服务器中的程序进行访问,当然了也可以对其他任何的Web服务器进行访问。


/
//
//   程序主要功能:使用winsock模拟一个客户端与基于HTTP协议的Web服务器进行通信。
//                 这个客户端访问的站点是本机建的一个web服务器(127.0.0.1:1234).
//
///
/

#include<WinSock2.h>
#include<stdio.h>
#pragma comment(lib,"ws2_32.lib")

void main()
{
	// 初始化Windows socket
	WSADATA wsaData;
	if ( WSAStartup( MAKEWORD( 2, 2 ) , &wsaData ) != 0 ) 
	{
		return;
	}

	//创建客户端套接字
	SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

	// 填充HTTP服务器的地址,以便发出正确的请求
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(827);
	
	// 连接HTTP服务器
	connect(sockClient , (SOCKADDR *)&addrSrv , sizeof(SOCKADDR));

	// 构造HTTP协议的Request Header
	char req[1000] = "GET /dynamic/Add?1&2 HTTP/1.1\r\n\
	Host: 127.0.0.1\r\n\
	User-Agent: Mozilla/5.0\r\n\
	Accept: */*\r\n\
	Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n\
	Connection: keep-alive\r\n\r\n";//Proxy-Connection: Keep-Alive\r\nConnection: Keep-Alive\r\n

	// 发送Http请求
	send(sockClient,req,strlen(req)+1,0) ;

	// 初始化内存
	char recvBuffer[1000];
	memset(recvBuffer,NULL,sizeof(recvBuffer));

	// 收到HTTP服务器发来的响应
	recv(sockClient,recvBuffer,1000,0);

	// 输出响应的内容
	printf("%s\n",recvBuffer);

	// 关闭套接字
	closesocket(sockClient);
	// 清除数据
	WSACleanup();
}

这个程序发送的请求命令中的URI是这样的:

  /dynamic/Add?1&2 HTTP/1.1\r\n\
所以其会对我们之前实现的那个Web服务器进行访问。要百度就行访问的话,只需要这样写即可:

 "GET / HTTP/1.1\r\n\
但是后面的Host需要修改为:www.baidu.com。





版权声明:本文为bobopeng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。