【网络编程】获取网站头条
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <iconv.h>
int main()
{
int sock=socket(AF_INET,SOCK_STREAM,0);
struct hostent* he=gethostbyname("war.163.com");
if(he==NULL)
{
perror("gethostbyname");
exit(1);
}
const char* srv_ip=inet_ntoa(*(struct in_addr*)(he->h_addr_list[0]));
//printf("%s\n",srv_ip);
struct sockaddr_in srv_addr;
srv_addr.sin_family=AF_INET;
srv_addr.sin_addr.s_addr=inet_addr(srv_ip);
srv_addr.sin_port=htons(80);
if(-1==connect(sock,(struct sockaddr*)&srv_addr,sizeof(srv_addr)))
{
perror("connect");
exit(1);
}
char request[]="GET / HTTP/1.1\r\n"
"Host: war.163.com\r\n"
"Connection: close\r\n"
"\r\n";
send(sock,request,strlen(request),0);
int buff_len=5*1024*1024;
char *buff=(char*)malloc(buff_len);
if(buff==NULL) perror("malloc");
int ret;
int cnt=0;
while(1)
{
ret=recv(sock,buff+cnt,buff_len-cnt,0);
if(ret<1) break;
cnt+=ret;
}
buff[cnt]='\0';
//printf("%s\n",buff);
char *buff2=(char*)malloc(2*cnt);
memset(buff2,0,2*cnt);
char* pb1=buff;
char* pb2=buff2;
size_t len1=cnt;
size_t len2=2*cnt;
iconv_t cd=iconv_open("UTF8","GBK");
iconv(cd,&pb1,&len1,&pb2,&len2);
iconv_close(cd);
//printf("%s\n",buff2);
char* p1=strstr(buff2,"国际军情");
if(p1!=NULL)
{
int i;
for(i=0;i<5;i++)
{
char* p2=strstr(p1,"html\">")+strlen("html\">");
char* p3=strstr(p2,"</a>");
char msg[1000]="";
strncpy(msg,p2,p3-p2);
printf("%s\n",msg);
p1=p3;
}
}
free(buff);
free(buff2);
close(sock);
return 0;
}
作者: 快乐的提千万
出处:https://www.cnblogs.com/HappyTeemo/p/18509815
版权:本站使用「CC BY 4.0」创作共享协议,未经作者同意,请勿转载;若经同意转载,请在文章明显位置注明作者和出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)