Как получить подстроку до "\ r \ n \ r \ n" - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть следующая строка:

HTTP/1.1 200 OK
Date: Tue, 06 Dec 2011 11:53:22 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�@��AQ������t

Я хочу извлечь до "\r\n\r\n", отбрасывая двоичные данные. То есть :

HTTP/1.1 200 OK
Date: Tue, 06 Dec 2011 11:53:22 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

Как это сделать в C?

Ответы [ 2 ]

6 голосов
/ 06 декабря 2011

Это можно легко сделать простым нахождением первых двух последовательных разрывов строк, поскольку это завершает заголовок, а затем копирует все до этой точки в отдельный буфер:

// find the end of the header, which is terminated
// by two linebreaks
char* end = strstr(header, "\r\n\r\n");
char* buffer = 0;
if(end) {
    // allocate memory to hold the entire header
    buffer = malloc((end - header) + 1);
    if(buffer) {
        // copy header to buffer
        memcpy(buffer, header, end - header);
        // null terminate the buffer
        buffer[end - header] = 0;
        // do something with the buffer

        // don't forget to release the allocated memory
        free(buffer);
    }
}
1 голос
/ 06 декабря 2011

Вы можете использовать функцию strstr .

Но помните, что существуют хорошие библиотеки C для HTTP-клиента (например, libcurl ) и для HTTP-сервера (например, onion ). И этот HTTP сложен в деталях.

...