Я пишу простую функцию, которая разделяет двоичный файл / post-data / html из ответа HTTP. Заголовки HTTP завершаются \r\n\r\n
, остальное - сообщение.
Я написал это:
#define MAX_BUFFER_SIZE 256
//...
int size = 0;
int buf_size = MAX_BUFFER_SIZE;
char * headers = malloc(MAX_BUFFER_SIZE);
char * newbuf;
while(httpresponse[size]) {
if(httpresponse[size] == '\r' &&
httpresponse[size + 1] == '\n' &&
httpresponse[size + 2] == '\r' &&
httpresponse[size + 3] == '\n') {
break;
}
headers[size] = httpresponse[size];
if(size >= buf_size) {
buf_size += MAX_BUFFER_SIZE;
newbuf = realloc(headers, buf_size);
if(NULL == newbuf) exit(1);
headers = newbuf;
}
size ++;
}
printf("%s\n", headers);
переменная httpresponse
, имеет значение, подобное:
HTTP/1.1 200 OK
Date: Fri, 23 Mar 2012 15:28:17 GMT
Expires: Sat, 23 Mar 2013 15:28:17 GMT
Cache-Control: public, max-age=31536000
Last-Modified: Thu, 14 Apr 2011 15:46:35 GMT
Content-Type: image/jpeg
Content-Length: 12745
X-XSS-Protection: 1; mode=block
Connection: close
���������I1��} �g������'�B�f�p���ohd]sft�����J�������1����瘿ٱ����$3�G�8��4=�E�i����ܼG����H��nbi�"�1��b[Ǘl��++���OPt�W��>�����i�]t�QT�N/,Q�Qz������0�` N7���M��f��S�Š�x9k��$*
//more binary...
но в вышеприведенной программе на C выведите следующий текст:
HTTP/1.1 200 OK
Date: Fri, 23 Mar 2012 17:12:09 GMT
Expires: Sat, 23 Mar 2013 17:12:09 GMT
Last-Modified: Thu, 14 Apr 2011 15:46:35 GMT
Content-Type: image/jpeg
Content-Length: 12745
X-XSS-Protection: 1; mode=block
Cache-Control: public, max-age=31536000
Age: 3746
�2�/���ms���|ނ����LQr2K3�v��J.�,�z��^Oy����s(ct���X`iA����I����U�{
вместо:
HTTP/1.1 200 OK
Date: Fri, 23 Mar 2012 15:28:17 GMT
Expires: Sat, 23 Mar 2013 15:28:17 GMT
Cache-Control: public, max-age=31536000
Last-Modified: Thu, 14 Apr 2011 15:46:35 GMT
Content-Type: image/jpeg
Content-Length: 12745
X-XSS-Protection: 1; mode=block
Connection: close
как это исправить? Заранее спасибо.