一、实验目的
熟悉Socket TCP编程,实现一个简单的HTTP客户端
二、实验内容
向指定的web服务器发送HTTP请求,服务器响应,获取服务器的首页(主页),在客户端显示该主页的主要信息(HTTP版本号等和HTML文档的部分内容),不解析HTML。
三、实验过程
本实验核心代码(注意下面向服务器发送数据的格式非常重要,格式不对将无法请求成功):
char sendData[] = "GET / HTTP/1.1\r\nHOST:www.baidu.com\r\n\r\n";
四、实验结果
五、总结
本次实验,我学会了如何通过Socket TCP编程,实现向服务器发送HTTP请求的功能,爬取到服务器主页的HTML数据。在实验中遇到的问题主要是请求不成功的问题,我通过查询资料,发现发送的数据格式不正确,当我按照正确的数据格式进行发送时,便能得到服务器的响应,获取到了服务器主页的信息。
通过这个实验,结合写python爬虫的点滴经历,我加深了对爬虫基本原理的认识。
附上实验代码:
开发环境:VC++6.0
编程语言:C
注意端口号设成80,IP地址设置成百度的IP:220.181.112.244
#include <WINSOCK2.H>
#include <STDIO.H>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
//freopen("out.txt","w",stdout);
WORD sockVersion = MAKEWORD(2,2);
WSADATA data;
if(WSAStartup(sockVersion, &data) != 0)
{
return 0;
}
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sclient == INVALID_SOCKET)
{
printf("invalid socket !");
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(80);
serAddr.sin_addr.S_un.S_addr = inet_addr("220.181.112.244");
if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
printf("connect error !");
closesocket(sclient);
return 0;
}
//向百度服务器发请求,获取百度服务器主页
char sendData[] = "GET / HTTP/1.1\r\nHOST:www.baidu.com\r\n\r\n";
send(sclient, sendData, strlen(sendData), 0);
char recData[BUFSIZ];
while( recv(sclient, recData,BUFSIZ, 0)>0){
printf("%s",recData);
strnset(recData, '\0',BUFSIZ);
}
closesocket(sclient);
WSACleanup();
return 0;
}