就是用c语言的写的一个简单http请求,并分析其响应,原理很简单,主要是分析http响应,麻烦的是提取其中的比赛信息
复制代码 代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define USERAGENT "Wget/1.10.2"
#define ACCEPT "*
{
if(DEBUG) fprintf(stderr,"tGethostname '%s' error, %sn", HOSTNAME, strerror(errno));
exit(1);
}
GetLocalAgent(UserAgent, Accept, AcceptLanguage, AcceptEncoding, AcceptCharset, KeepAlive, Connection, ContentType);
sprintf(Request, "GET /%s/%s HTTP/1.0rnHost: %srnUser-Agent: %srnAccept: %srnConnection: %srnrn", "/", "", HOSTNAME, UserAgent, Accept, Connection);
}
复制代码 代码如下:
void ConnectWeb()
{
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"t SOCKET ERROR:%san",strerror(errno));
exit(1);
}
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"t ConNECT ERROR:%san",strerror(errno));
exit(1);
}
}
void SendRequest()
{
int wn=0;
wn=write(sockfd,Request,strlen(Request));
if(wn==-1)
{
fprintf(stderr,"t SEND ERROR:%san",strerror(errno));
exit(1);
}
fprintf(stdout, "ntRequest. send OK!n" );
}
void SaveResult()
{
fd_set readfds;
struct timeval tival;
int i,j,ret;
i=j=ret=0;
int n=0;
RECIVE:
FD_ZERO(&readfds);
tival.tv_sec=10;
tival.tv_usec=0;
if(sockfd>0)
FD_SET(sockfd,&readfds);
ret=select(sockfd+1,&readfds,NULL,NULL,&tival);
if(ret==0)
{
if(n++<2)
goto RECIVE;
}
if(FD_ISSET(sockfd,&readfds))
{
while(read(sockfd,Recive,sizeof(Recive)))
{
fwrite(Recive,sizeof(Recive),1,fp);
memset(Recive,0,sizeof(Recive));
}
}
}
复制代码 代码如下:
void EchoResult()
{
fd_set readfds;
struct timeval tival;
int i,j,ret;
i=j=ret=0;
int n=0;
RECIVE:
FD_ZERO(&readfds);
tival.tv_sec=2;
tival.tv_usec=0;
if(sockfd>0)
FD_SET(sockfd,&readfds);
ret=select(sockfd+1,&readfds,NULL,NULL,&tival);
if(ret==0)
{
if(n++<2)
goto RECIVE;
}
if(FD_ISSET(sockfd,&readfds))
{
char c;
while(read(sockfd,&c,1))
{
if(c=='d')
{
read(sockfd,&c,1);
if(c=='i')
{
read(sockfd,&c,1);
if(c=='v')
{
read(sockfd,&c,1);
if(c==' ')
{
read(sockfd,&c,1);
if(c=='c')
{
read(sockfd,&c,1);
if(c=='l')
{
read(sockfd,&c,1);
if(c=='a')
{
read(sockfd,&c,1);
if(c=='s')
{
read(sockfd,&c,1);
if(c=='s')
{
read(sockfd,&c,1);
if(c=='=')
{
read(sockfd,&c,1);
if(c=='"')
{
read(sockfd,&c,1);
if(c=='t')
{
read(sockfd,&c,1);
if(c=='i')
{
read(sockfd,&c,1);
if(c=='t')
{
read(sockfd,&c,1);
if(c=='l')
{
read(sockfd,&c,1);
if(c=='e')
{
read(sockfd,&c,1);
if(c=='b')
{
read(sockfd,&c,1);
if(c=='a')
{
read(sockfd,&c,1);
if(c=='r');
{
read(sockfd,&c,1);
if(c=='"')
GetDayInfo();
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
复制代码 代码如下:
void GetDayInfo()
{
// int f=open("./s.txt",O_WRonLY|O_CREAT);
char t;
char Line[1024]="";
int sday=wday+count;
if(count++>=7)
return;
printf("n***********%d年 %d月 %d日, 星期 %d **********************nn",year,mon,day+count-1,sday>7?sday%7:sday);
while(read(sockfd,&t,1))
{
if(t=='l')
{
read(sockfd,&t,1);
if(t=='i');
{
int ln=0;
memset(Line,0,sizeof(Line));
while(read(sockfd,Line+(ln++),1))
{
char *s=strstr(Line,"");
if(s!=NULL)
break;
}
Line[ln]=0;
HandLine(Line);
}
}
else if(t=='/')
{
read(sockfd,&t,1);
if(t=='u')
{
read(sockfd,&t,1);
if(t=='l');
return;
}
}
}
}
void HandLine(char *l)
{
l++;
char *NBA="NBA常规赛";
char *p=strstr(l,NBA);
if(p==NULL)
return;
char *t=strstr(l," int lt=strlen(l)-strlen(t);
char *time=(char*)malloc(sizeof(char)*lt);
memcpy(time,l,lt);
char *p1=strstr(p,"/b>");
char *p2=strstr(p," int n=strlen(p1)-strlen(p2)-3;
char *TeamVsTeam=(char*)malloc(n*sizeof(char));
memcpy(TeamVsTeam,p1+3,n);
char *p3=strstr(p2,"_blank">");
char *p4=strstr(p3,"");
int m=strlen(p3)-strlen(p4)-8;
char *Live=(char*)malloc(sizeof(char)*m);
memcpy(Live,p3+8,m);
printf("time:%s The Teams:%s TV Live:%sn",time,TeamVsTeam,Live);
}
void GetTime()
{
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
year=timeinfo->tm_year+1900;
mon =timeinfo->tm_mon+1;
day =timeinfo->tm_mday;
wday=timeinfo->tm_wday;
if(wday==0)
wday=7;
}
int main()
{
fp=fopen("Info.txt","w");
if(fp==NULL)
{
fprintf(stderr,"creat file is error n");
exit(1);
}
CreatRequest();
ConnectWeb();
SendRequest();
EchoResult();
printf("IS END !!n");
return 0;
}



