zoukankan      html  css  js  c++  java
  • 利用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;
    }
    

  • 相关阅读:
    GDC2017:Framegraph-extensible-rendering-architecture-in-frostbite
    17072802(UE4的批量Import)
    16011301(统计指令数影响耗时)
    16080401(面向摄像机的Instance模型)
    UE4编译_201701
    17020701(AnimDynamic继续)
    Python过滤utf8mb4无效字符
    Windows下安装MySQL-python
    使用Pycharm更新Github项目(到源项目)
    python异常:error: command 'gcc' failed: No such file or directory
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835205.html
Copyright © 2011-2022 走看看