C beginner: parsing strings

I am trying to parse the following HTTP response:

HTTP/1.1 200 OK Date: Tue, 06 Dec 2011 11:15:21 GMT Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.9 Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 48 Content-Type: text/html   ( Ν±   I O    H         4 @ B $   S 

I want to extract "48" and binary content.

Here is what I tried sofar:

  //char* str contains the response char * pch; printf ("Splitting response into tokens:\n"); pch = strtok (str,"\r\n"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, "\r\n"); } 

But I'm stuck right now ... Any help is greatly appreciated.


edit:

Here is what I did sofar:

 char* pch; char* pch2; pch=strstr(buf,"Content-Length:"); pch2=strstr(pch,"\r\n"); 

How can I get a bit between these two pointers?


Edit: solution:

  char* pch; char* pch2; pch=strstr(buf,"Content-Length:"); int i=0; char contLen[20]; for(i=0;i<20;i++){ char next=pch[strlen("Content-Length:")+i]; if(next=='\r' || next=='\n'){ break; } contLen[i]=next; } printf("%d\n",atoi(contLen)); 
+7
source share
2 answers

Why don't you look for the string "Content-Length:" ? then from this point forward.

You can use strstr () to find a place in str , then move the char pointers forward strlen ("Content-Length:") , then read the value with atoi ()

no need to mark an entire line

+6
source

Try the following:

 const char* http_header = "HTTP/1.1 200 OK\r\n" \ "Date: Tue, 06 Dec 2011 11:15:21 GMT" \ "Server: Apache/2.2.14 (Ubuntu)\r\n" \ "X-Powered-By: PHP/5.3.2-1ubuntu4.9\r\n" \ "Vary: Accept-Encoding\r\n" \ "Content-Encoding: gzip\r\n" \ "Content-Length: 48\r\n" \ "Content-Type: text/html\r\n\r\n" \ "mydata"; // will point to start of data char* pdata = strstr((char*)http_header,"\r\n\r\n"); // will point to start of 'Content-Length' header char* pcontent = strstr((char*)http_header,"Content-Length:"); // get the length of the data int value = atoi(pcontent+15); 
+2
source

All Articles