C语言 使用strtok拆分http响应\r\n\r\n

r3i60tvu  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(229)

我正在尝试拆分此字符串:

#define INVALID_NUMBER_PARAMS "HTTP/1.1 400 Bad Request\r\ncontent-type: text/html\r\ncontent-encoding: identity\r\ncontent-length: 59\r\n\r\nCould not fulfill request due to wrong number of paramaters"

在delim:\r\n\r\n使用此函数:

void splitString(struct Arr* arr, char* str, char* delim) {

    if (!initialAlloc(arr)) {

        exit(1);

    }

    char* subStr = strtok(str, delim);

    while (subStr != NULL) {

        addToArr(arr, subStr);
        
        subStr = strtok(NULL, delim);

    }

}

但是,在char* str是响应并且delim= \r\n\r\n的情况下使用它会导致响应在每个头部结束而不是在主体开始的地方被分割。我也尝试过双反斜杠delim,甚至尝试了多种变体,比如\r\r\n\n\r\n\r\n,但我仍然得到随机分割。使用\r\r会导致以下结果:

str: http/1.1 400 bad 
str: equest
content-type: text/html
content-encoding: identity
content-length: 59

could not fulfill 
str: equest due to w
str: ong numbe
str:  of pa
str: amate
str: s

我这样调用函数来接收输出:

splitString(&split, tempStr, "\\r\\r");
                for (int x = 0; x < split.currentSize; x++) {
                    printf("str: %s\n", split.cArr[x]);
                }

如何使此函数在\r\n\r\n处拆分以获得2个索引,一个包含所有标头,另一个包含主体?

sirbozc5

sirbozc51#

答案是按照建议使用strstr来查找子字符串的正确索引,然后将\r\n\r\n右侧的所有内容放入tempString中,然后对其进行strlen

相关问题