📄 httpencode.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 + -