⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpencode.cpp

📁 linux下最常用的bt下载软件的最新源代码
💻 CPP
字号:
#include <sys/types.h>#include "./def.h"#include "./httpencode.h"#include <stdlib.h>#include <ctype.h>#include <string.h>#include "./config.h"#ifndef HAVE_STRNSTR/* FUNCTION PROGRAMER: Siberiaic Sang */static char* strnstr(const char *haystack,const char *needle,size_t haystacklen){   char *p;   ssize_t plen;   ssize_t len = strlen(needle);  if (*needle == '\0')    return (char*) haystack;  plen = haystacklen;  for (p = (char*) haystack; p != (char*) 0; p = (char*)memchr(p + 1, *needle, plen-1)) {    plen = haystacklen - (p - haystack);    if (plen < len) return (char*) 0;    if (strncmp(p, needle, len) == 0)      return (p);  }  return (char*) 0;}#endif/* ************************************************** */static void url_encode_char(char *b,char c){  char HEX_TABLE[] = "0123456789ABCDEF";  b[0] = '%';  b[1] = HEX_TABLE[(c >> 4) & 0x0F];  b[2] = HEX_TABLE[c & 0x0F];}char* Http_url_encode(char *s,char *b,size_t n){  size_t r,i;  for(r = 0,i = 0 ; i < n; i++){    if( isalpha(b[i]) || isdigit(b[i]) ){      s[r] = b[i];      r++;    }else{      url_encode_char(s + r, b[i]);      r += 3;    }  }  s[r] = '\0';  return s;}int Http_url_analyse(char *url,char *host,int *port,char *path){  char *p;  int r;  *port = 80;	/* default port 80 */  p = strstr(url,"://");  if( !p )     p = url;  else    p += 3;  /* host */  for(; *p && (isalnum(*p) || *p == '.' || *p == '-'); p++, host++)     *host = *p;  *host = '\0';  if( *p == ':' ){    /* port */    p++;    for( r = 0; p[r] >= '0' && p[r] <= '9' && r < 6; r++) ;    if( !r ) return -1;    *port = atoi(p);    if(*port > 65536) return -1;    p += r;  }  /* path */  if( *p != '/' ) return -1;  for( ; *p && *p != '?'; p++,path++) *path = *p;  *path = '\0';  return 0;}size_t Http_split(char *b,size_t n,char **pd,size_t *dlen){  char *p;  size_t addtion, hlen;  addtion = 2; hlen = 0;  if( n < 16 ) return 0;	// 长度太小,不可能是一个HTML报文  if(strncasecmp(b,"HTTP/",5) != 0){    return 0;			// 没有HTML首部????    /* message without http header */    //*pd = b;    //*dlen = n;  }else{    p = strnstr(b,"\n\n",n);    if( !p ){ p = strnstr(b,"\r\n\r\n",n); if(p) addtion = 4;}    if( p ){      hlen = p - b;      *pd = ( p + addtion );      *dlen = n - hlen - addtion;    }else{			// 只有首部信息????      hlen = n;      *pd = (char*) 0;      *dlen = 0;    }  }  return hlen;}int Http_reponse_code(char *b,size_t n){  int r = -1;  for(; n && *b != ' ' && *b != '\n'; b++,n--) ;  if( !n || *b != ' ') r = -1;  else{	  r = atoi(b);	  if( r < 100 || r > 600 ) r = -1;  }  return r;}int Http_get_header(char *b,int n,char *header,char *v){  char *e,h[64];  int r,header_len;  strcpy(h,header);  strcat(h,": ");  header_len = strlen(h);  /* remove status line. */  e = strchr(b,'\n');  if( !e ) return -1;  e++;  n -= (e - b);  b = e;  for(; n >= 0; ){    e = strchr(b,'\n');      if( !e ) r = n;		/* last line */    else{r = e - b ; r++;}      if( r > header_len ){      if( strncasecmp(b, h, header_len) == 0){	/* header founded */	b += header_len;	for(; *b != '\n'; v++,b++) *v = *b;	*v = '\0';	return 0;      }    }    b += r;    n -= r;  } /* end for */  return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -