【发布时间】:2012-02-08 23:22:43
【问题描述】:
我有一个长字符串,其中包含如下信息:
"GET http://www.google.se/ HTTP/1.1\r\n
Host: www.google.se\r\n
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20100101 Firefox/4.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: en-us,en;q=0.5\r\n
Accept-Encoding: gzip, deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 115\r\n
Proxy-Connection: keep-alive\r\n
Cookie: PREF=ID=7d6a62c557413bc8:FF=0:TM=1327968040:LM=1327968040:S=U1A51rCRDDMTF295\r\n
Cache-Control: max-age=0\r\n\r\n"
我想摆脱代理连接下的保持活动部分.. 这就是我目前正在做的事情:
- 将字符串(标题)放入函数中。
- 使用两个字符串(标题和主机)创建结构
- 将标头中的主机名放入主机部分(显然)
- 并将标题放在标题部分。
现在我想在将标头放入结构的标头部分之前摆脱 keep-alive 部分。
有什么想法吗?
这是我迄今为止所做的一些代码。我是 C 新手,所以可能不是你见过的最漂亮的代码..
struct ParsedHeader header_parser(char * input) {
struct ParsedHeader h;
int status;
regex_t regex;
char * result_begin = NULL;
regcomp(®ex, "host:", REG_EXTENDED|REG_ICASE|REG_NOSUB);
if((status = regexec(®ex, input, (size_t) 0, NULL, 0)) == 0) {
char end = '\r';
char * header = malloc(strlen(input));
char * begin = "host:";
size_t result_size = 0;
memcpy(header, input, strlen(input));
to_lower(input, header, strlen(input));
result_begin = (strstr(header, begin) + 6);
char * result_end = strchr(result_begin, end);
result_end[0] = '\0';
//char result[strlen(result_begin)] = result_begin;
free(header);
}
regfree(®ex);
h.header = input;
h.host = result_begin;
return h;
}
【问题讨论】:
-
也许如果你在这里发布了你的代码中最相关的部分,这个问题会得到更多的关注。
-
你想去掉这个特定的
KeepAlive: 115行,还是KeepAlive 的任何可能值? -
错误:将 malloc 更改为 malloc(strlen(input)+1),因为您需要为终止的 null 分配空间。
标签: c regex string parsing proxy