• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-07-16
  • 语言: C/C++
  • 标签: C语言  http  

资源简介

c语言 http client的实现。c源代码。绝对可以使用,已得到个人和他人验证。仅用于学习和交流使用。

资源截图

代码片段和文件信息

大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的。每次用到FlashGet之类的下载软件下载网页,当用到那个“用FlashGet下载全部链接”时总觉得很神奇。
后来想想,其实要实现这些下载功能也并不难,只要按照HTTP协议发送request,然后对接收到的数据进行分析,如果页面上还有href之类的链接指向标志就可以进行深一层的下载了。HTTP协议目前用的最多的是1.1版本,要全面透彻地搞懂它就参考RFC2616文档吧。
下面是我用C语言编程写的一个http下载程序,希望对大家有些启发。源代码如下:


******* 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) 周立发(http://zhoulifa.bokee.com)
           Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2006-03-11 21:49:00
*Note: 任何人可以任意复制代码并运用这些代码,当然包括你的商业用途
*                         但请遵循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

评论

共有 条评论