客户管理解析之客服端的实现.docx

上传人:b****2 文档编号:952204 上传时间:2022-10-14 格式:DOCX 页数:5 大小:16.79KB
下载 相关 举报
客户管理解析之客服端的实现.docx_第1页
第1页 / 共5页
客户管理解析之客服端的实现.docx_第2页
第2页 / 共5页
客户管理解析之客服端的实现.docx_第3页
第3页 / 共5页
客户管理解析之客服端的实现.docx_第4页
第4页 / 共5页
客户管理解析之客服端的实现.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

客户管理解析之客服端的实现.docx

《客户管理解析之客服端的实现.docx》由会员分享,可在线阅读,更多相关《客户管理解析之客服端的实现.docx(5页珍藏版)》请在冰豆网上搜索。

客户管理解析之客服端的实现.docx

客户管理解析之客服端的实现

 

(客户管理)解析之客服端的实现

大家均很熟悉HTTP协议的应用,因为每天均于网络上浏览着不少东西,也均知道是HTTP协议是相当简单的。

每次用thunder之类的下载软件下载网页,当用到那个“用thunder下载全部链接”时总觉得很神奇。

后来想想,其实要实现这些下载功能也且不难,只要按照HTTP协议发送request,然后对接收到的数据进行分析,如果页面上仍有href之类的链接指向标志就能够进行深壹层的下载了。

HTTP协议目前用的最多的是1.1版本,要全面透彻地搞懂它就参考RFC2616文档吧。

我是怕rfc文档了的,要见自己去见吧^_^

源代码如下:

/*******http客户端程序httpclient.c************/#include

#include#include#include#include#include#include#include#include#include#include

#include

//////////////////////////////httpclient.c开始

///////////////////////////////////////////

/********************************************

功能:

搜索字符串右边起的第壹个匹配字符

********************************************/char*Rstrchr(char*s,charx){

inti=strlen(s);if(!

(*s))return0;

while(s[i-1])if(strchr(s+(i-1),x))return(s+(i-1));elsei--;return0;

}

/********************************************

功能:

把字符串转换为全小写

********************************************/voidToLowerCase(char*s){while(s&&*s){*s=tolower(*s);s++;}

}

/**************************************************************

功能:

从字符串src中分析出网站地址和端口,且得到用户要下载的文件

***************************************************************/voidGetHost(char*src,char*web,char*file,int*port){

char*pA;char*pB;

memset(web,0,sizeof(web));memset(file,0,sizeof(file));

*port=0;if(!

(*src))return;pA=src;

if(!

strncmp(pA,"http:

//",strlen("http:

//")))pA=src+strlen("http:

//")

;

elseif(!

strncmp(pA,"https:

//",strlen("https:

//")))pA=src+strlen("https:

//");

pB=strchr(pA,'/');if(pB){

memcpy(web,pA,strlen(pA)-strlen(pB));if(pB+1){

memcpy(file,pB+1,strlen(pB)-1);file[strlen(pB)-1]=0;

}

}

elsememcpy(web,pA,strlen(pA));if(pB)web[strlen(pA)-strlen(pB)]=0;elseweb[strlen(pA)]=0;pA=strchr(web,':

');if(pA)*port=atoi(pA+1);else*port=80;

}

intmain(intargc,char*argv[])

{

intsockfd;charbuffer[1024];

structsockaddr_inserver_addr;structhostent*host;intportnumber,nbytes;charhost_addr[256];charhost_file[1024];charlocal_file[256];

FILE*fp;charrequest[1024];

intsend,totalsend;inti;

char*pt;if(argc!

=2)

{

fprintf(stderr,"Usage:

%sweb-address/a/n",argv[0]);exit

(1);

}

printf("parameter.1is:

%s/n",argv[1]);ToLowerCase(argv[1]);/*将参数转换为全小写*/printf("lowercaseparameter.1is:

%s/n",argv[1]);

GetHost(argv[1],host_addr,host_file,&portnumber);/*分析网址、端口、文件名等*/

printf("webhost:

%s/n",host_addr);printf("hostfile:

%s/n",host_file);printf("portnumber:

%d/n/n",portnumber);if((host=gethostbyname(host_addr))==NULL)/*取得主机IP地址*/

{

fprintf(stderr,"Gethostnameerror,%s/n",strerror(errno));exit

(1);

}

/*客户程序开始建立sockfd描述符*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)/*建立SOCKET连接*/

{

fprintf(stderr,"SocketError:

%s/a/n",strerror(errno));exit

(1);

}

/*客户程序填充服务端的资料*/bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(portnumber);server_addr.sin_addr=*((structin_addr*)host->h_addr);

/*客户程序发起连接请求*/

if(connect(sockfd,(structsockaddr*)(&server_addr),sizeof(structsockaddr))==-1)/*连接网站*/

{

fprintf(stderr,"ConnectError:

%s/a/n",strerror(errno));exit

(1);

}

sprintf(request,"GET/%sHTTP/1.1/r/nAccept:

*/*/r/nAccept-Language:

zh-cn/r/n/

User-Agent:

Mozilla/4.0(compatible;MSIE5.01;WindowsNT5.0)/r/n/

Host:

%s:

%d/r/nConnection:

Close/r/n/r/n",host_file,host_addr,portnumber);

printf("%s",request);/*准备request,将要发送给主机*/

/*取得真实的文件名*/if(host_file&&*host_file)pt=Rstrchr(host_file,'/');elsept=0;

memset(local_file,0,sizeof(local_file));if(pt&&*pt){if((pt+1)&&*(pt+1))strcpy(local_file,pt+1);

elsememcpy(local_file,host_file,strlen(host_file)-1);

}

elseif(host_file&&*host_file)strcpy(local_file,host_file);elsestrcpy(local_file,"index.html");printf("localfilenametowrite:

%s/n/n",local_file);

/*发送http请求request*/send=0;totalsend=0;nbytes=strlen(request);

while(totalsend

%s/n",strerror(errno));exit(0);}totalsend+=send;

printf("%dbytessendOK!

/n",totalsend);

}

fp=fopen(local_file,"a");if(!

fp){

printf("createfileerror!

%s/n",strerror(errno));return0;

}

printf("/nThefollowingistheresponseheader:

/n");i=0;

/*连接成功了,接收http响应,response*/while((nbytes=read(sockfd,buffer,1))==1)

{

if(i<4){if(buffer[0]=='/r'||buffer[0]=='/n')i++;elsei=0;

printf("%c",buffer[0]);/*把http头信息打印于屏幕上*/

}

else{

fwrite(buffer,1,1,fp);/*将http主体信息写入文件*/i++;

if(i%1024==0)fflush(fp);/*每1K时存盘壹次*/

}

}

fclose(fp);

/*结束通讯*/close(sockfd);exit(0);

}

zj@zj:

~/C_pram/practice/http_client$lshttpclienthttpclient.czj@zj:

~/C_pram/practice/http_client$./httpclienthttp:

///parameter.1is:

http:

///

lowercaseparameter.1is:

http:

///webhost:

hostfile:

portnumber:

80

GET/HTTP/1.1

Accept:

*/*

Accept-Language:

zh-cn

User-Agent:

Mozilla/4.0(compatible;MSIE5.01;WindowsNT5.0)Host:

:

80

Connection:

Closelocalfilenametowrite:

index.html163bytessendO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1