I'm 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 the binary content.
Here's what I've 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 kinda stuck now... Any help is greatly appreciated.
edit:
Here's what I've done sofar:
char* pch;
char* pch2;
pch=strstr(buf,"Content-Length:");
pch2=strstr(pch,"\r\n");
How can I get the 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));
Why don't you instead search for the string "Content-Length:"
, then from that point move forwards?
You can use strstr()
to find the spot in str
, then move the char pointer forward strlen("Content-Length:")
positions, then read the value using atoi()
.
There is no need to tokenize the whole string.
Try this:
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 the actual data that following the http header
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With