如何在C中解析HTTP响应?

我正在编写一个小项目,它使用HTTP 1.1 GET和POST与一组服务器进行交互。 服务器在一些标题行之后给出了响应,所以我在使用\n作为分隔符时使用strtok()函数但是每当我尝试这样做时都会发生崩溃。

有没有简单的方法来解析C中的HTTP响应? 我不想为此使用第三方库,但如果它真的是必要的,我将不会有任何问题。

非常感谢你所做的一切。

编辑:这是一些示例代码,只是尝试打印行:

 char *response = "HTTP/1.1 200 OK\nServer: Apache-Coyote/1.1\nPragma: no-cache" char *token = NULL; token = strtok(response, "\n"); while (token) { printf("Current token: %s.\n", token); token = strtok(NULL, "\n"); } 

http-parser是一个简单且超快的HTTP解析器,用C语言编写,用于Node.js项目

它只有2个C文件,没有任何外部依赖。

您发布的代码中的问题非常简单: strtok通过修改传递给它的字符串来工作。 修改字符串文字会产生未定义的行为。 对代码进行真正微小的更改可以使它工作(我还引导了相应的头,并将可执行部分移动到一个函数中:

 #include  #include  char response[] = "HTTP/1.1 200 OK\nServer: Apache-Coyote/1.1\nPragma: no-cache"; int main() { char *token = NULL; token = strtok(response, "\n"); while (token) { printf("Current token: %s.\n", token); token = strtok(NULL, "\n"); } return 0; } 

在实际使用中,您无论如何都会将HTTP响应读入缓冲区; 你遇到的问题只出现在像你生成的一个简单的测试案例中。 与此同时,它确实指出了strtok是一个设计非常糟糕的function,而且你几乎肯定会用其他东西做得更好。