2013-09-04 3 views
0

У меня есть следующие C Строка:параметры Извлечение POST из C Строка

char teste[] = "POST /index.html HTTP/1.1\nHost: localhost:8000\nConnection: keep-alive\nContent-Length: 23\nCache-Control: max-age=0\nAccept: text/html,application/xhtml+x 
ml,application/xml;q=0.9,*/*;q=0.8\n Origin: http://localhost:8000\nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/ 
537.36\nContent-Type: application/x-www-form-urlencoded\nReferer: http://localhost:8000/index.html\nAccept-Encoding: gzip,deflate,sdch\nAccept-Language: pt-BR,pt;q=0.8,en-US;q= 
0.6,en;q=0.4\n\nnome=thiago&idade=12313"; 

И мне нужно, чтобы извлечь параметры POST, который происходит после '\ п \ п':

\ п \ nnome = Тьяго & idade = 12313" ;

strtok кажется застрять на первом „\ п“, поэтому я думаю, что есть лучший способ сделать это мой код до сих пор:.

char *token = malloc(100); 
char **value = malloc(100 * sizeof(char *)); 
char **key = malloc(100 * sizeof(char *)); 
int i; 

for(i = 0; i < 100; i++) 
{ 
    value[i] = malloc(100); 
    key[i] = malloc(100); 
} 

/* This doesn't work */ 
token = strtok(teste, "\n\n"); 

Любые идеи о том, как это решить? Благодаря!

ответ

1

Вы можете использовать strstr(), чтобы найти начало параметров:

char *params = strstr(teste, "\n\n"); 
if (params != NULL) { 
    params += 2; // now points to first key 
    // ... 
} 

, а затем использовать strtok() для разделения пар ключ-значение в params.

Примечание:strtok_r() версия возвратного из strtok(), и (по крайней мере, на OS X), strtok() является устарела, strsep().

+0

Хорошее решение, спасибо вам большое! – Fernando

Смежные вопросы