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

📄 httpencode.cpp

📁 linux系统下bt的客户端实现。 采用的是c++
💻 CPP
字号:
#include "Httpencode.h"#include <sys/types.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <stdio.h>static char *strnstr(const char *haystack, const char *needle,					 size_t haystacklen){	char *p;	size_t plen, len;	if (*needle == '\0')		return (char *) haystack;	len = strlen(needle);	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 (char *) p;	}	return (char *) 0;}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;	if (NULL == (p = strstr(url, "://")))		p = url;	else		p += 3;	for (; *p && (isalnum(*p) || *p == '.' || *p == '-'); p++, host++)		*host = *p;	*host = '\0';	if (':' == *p) {		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;	}	if (*p != '/')		return -1;	for (; *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;	if (strncasecmp(b, "HTTP/", 5) != 0) {		return 0;	}	p = strnstr(b, "\n\n", n);	if (!p) {		p = strnstr(b, "\r\n\r\n", n);		if (p)			addtion = 4;	}	if (p) {		*pd = p + addtion;		hlen = p - b;		*dlen = n - hlen - addtion;	} else {		hlen = n;		*pd = NULL;		*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(const 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);	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;		else {			r = e - b;			r++;		}		if (r > header_len) {			if (strncasecmp(b, h, header_len) == 0) {				b += header_len;				for (; *b != '\n'; b++, v++)					*v = *b;				*v = '\0';				return 0;			}		}		n -= r;		b += r;	}	return -1;}

⌨️ 快捷键说明

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