• 利用socket获取网页内容


    #include        <stdio.h>
    #include        <winsock.h>
    #include        <string.h>
    #pragma comment(lib, "ws2_32.lib")
    
    void geturl(char *url)
    {
    	WSADATA						WSAData={0};
    	SOCKET						sockfd;
    	struct sockaddr_in			addr;
    	struct hostent				*pURL;
    	char						myurl[BUFSIZ];
    	char						*pHost = 0, *pGET = 0;
    	char						host[BUFSIZ], GET[BUFSIZ];
    	char						header[BUFSIZ] = "";
    	static char					text[BUFSIZ];
    	int							i;
    
    	/*
    	*        windows下使用socket必须用WSAStartup初始化,否则不能调用
    	*/
    	if(WSAStartup(MAKEWORD(2,2), &WSAData))
    	{
    		printf("WSA failed\n");
    		return;
    	}
    
    	/*
    	*        分离url中的主机地址和相对路径
    	*/
    	strcpy(myurl, url);
    	for (pHost = myurl; *pHost != '/' && *pHost != '\0'; ++pHost);
    	if ( (int)(pHost - myurl) == strlen(myurl) )
    		strcpy(GET, "/");
    	else
    		strcpy(GET, pHost);
    	*pHost = '\0';
    	strcpy(host, myurl);
    	printf("%s\n%s\n", host, GET);
    
    	/*
    	*        设定socket参数,并未真正初始化
    	*/
    	sockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    	pURL = gethostbyname(host);
    	addr.sin_family = AF_INET;
    	addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
    	addr.sin_port = htons(80);
    
    	/*
    	*        组织发送到web服务器的信息
    	*        为何要发送下面的信息请参考HTTP协议的约定
    	*/
    	strcat(header, "GET ");
    	strcat(header, GET);
    	strcat(header, " HTTP/1.1\r\n");
    	strcat(header, "HOST: ");
    	strcat(header, host);
    	strcat(header, "\r\nConnection: Close\r\n\r\n");
    
    	/*
    	*        连接到服务器,发送请求header,并接受反馈(即网页源代码)
    	*/
    	connect(sockfd,(SOCKADDR *)&addr,sizeof(addr));
    
    	send(sockfd, header, strlen(header), 0);
    
    	while ( recv(sockfd, text, BUFSIZ, 0) > 0)
    	{        
    		printf("%s", text);
    		strnset(text, '\0', BUFSIZ);
    	}
    
    	closesocket(sockfd);
    
    	WSACleanup();
    }
    
    int main()
    {
    	char        url[256];
    	printf("http://");
    	scanf("%s", url);
    	geturl(url);
    	return 0;
    }
    

  • 相关阅读:
    笔记64 Spring Boot快速入门(四)
    笔记63 Spring Boot快速入门(三)
    笔记62 Spring Boot快速入门(二)
    笔记61 Spring Boot快速入门(一)
    笔记60 Spring+Mybatis整合
    笔记59 Spring+Hibernate整合(二)
    【转】单点登录原理与实现
    【转】大型网站架构演变和知识体系
    Eclipse下绿色安装插件Aptana、Swing
    zeromq源码分析笔记之准备(0)
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835205.html
Copyright © 2020-2023  润新知