(计算机网络课程实验)Socket TCP实现简单的HTTP客户端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/82947771

一、实验目的

熟悉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;
}

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/82947771