資源簡介
c語言 http client的實現。c源代碼。絕對可以使用,已得到個人和他人驗證。僅用于學習和交流使用。

代碼片段和文件信息
大家都很熟悉HTTP協議的應用,因為每天都在網絡上瀏覽著不少東西,也都知道是HTTP協議是相當簡單的。每次用到FlashGet之類的下載軟件下載網頁,當用到那個“用FlashGet下載全部鏈接”時總覺得很神奇。
后來想想,其實要實現這些下載功能也并不難,只要按照HTTP協議發(fā)送request,然后對接收到的數據進行分析,如果頁面上還有href之類的鏈接指向標志就可以進行深一層的下載了。HTTP協議目前用的最多的是1.1版本,要全面透徹地搞懂它就參考RFC2616文檔吧。
下面是我用C語言編程寫的一個http下載程序,希望對大家有些啟發(fā)。源代碼如下:
*******?http客戶端程序?httpclient.c?************/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
//////////////////////////////httpclient.c?開始///////////////////////////////////////////
/********************************************
功能:搜索字符串右邊起的第一個匹配字符
********************************************/
char?*?Rstrchr(char?*?s?char?x)??{
??int?i?=?strlen(s);
??if(!(*s))??return?0;
??while(s[i-1])?if(strchr(s?+?(i?-?1)?x))??return?(s?+?(i?-?1));??else?i--;
??return?0;
}
/********************************************
功能:把字符串轉換為全小寫
********************************************/
void?ToLowerCase(char?*?s)??{
??while(*s)??*s=tolower(*s++);
}
/**************************************************************
功能:從字符串src中分析出網站地址和端口,并得到用戶要下載的文件
***************************************************************/
void?GetHost(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://“);
??else?if(!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;
????}
??}
??else??memcpy(web?pA?strlen(pA));
??if(pB)??web[strlen(pA)?-?strlen(pB)]?=?0;
??else??web[strlen(pA)]?=?0;
??pA?=?strchr(web?‘:‘);
??if(pA)??*port?=?atoi(pA?+?1);
??else?*port?=?80;
}
/*********************************************************************
*filename:?httpclient.c
*purpose:?HTTP協議客戶端程序,可以用來下載網頁
*wrote?by:?zhoulifa(zhoulifa@163.com)?周立發(fā)(http://zhoulifa.bokee.com)
???????????Linux愛好者?Linux知識傳播者?SOHO族?開發(fā)者?最擅長C語言
*date?time:2006-03-11?21:49:00
*Note:?任何人可以任意復制代碼并運用這些代碼,當然包括你的商業(yè)用途
*?????????????????????????但請遵循GPL
*********************************************************************/
int?main(int?argc?char?*argv[])
{
??int?sockfd;
??char?buffer[1024];
??struct?sockaddr_in?server_addr;
??struct?hostent?*host;
??int?portnumbernbytes;
??char?host_addr[256];
??char?host_file[1024];
??char?local_file[256];
??FILE?*?fp;
??char?request[1024];
??int?send?totalsend;
??int?i;
??char?*?pt;
??if(argc!=2)
??{
????fprintf(stderr“Usage:%s?web-address\a\n“argv[0]);
????exit(1);
??}
??printf(“parameter.1?is:?%s\n“?argv[1]);
??ToLowerCase(argv[1]);/
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????6255??2009-07-30?13:24??http.c
評論
共有 條評論