我正在编写一个小项目,它使用HTTP 1.1 GET和POST与一组服务器进行交互。服务器在一些标题行之后给出了响应,所以我使用strtok()
函数使用\n
作为分隔符,但每当我尝试这样做时都会发生崩溃。
有没有简单的方法来解析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");
}
答案 0 :(得分:5)
http-parser是一个简单且超快的HTTP解析器,用C语言编写,用于Node.js项目
它只有2个C文件,没有任何外部依赖。
答案 1 :(得分:4)
您发布的代码中的问题非常简单:strtok
通过修改传递给它的字符串来工作。修改字符串文字会产生未定义的行为。对代码进行真正微小的更改可以使它工作(我还引导了相应的标题,并将可执行部分移动到函数中:
#include <string.h>
#include <stdio.h>
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
是一个设计非常糟糕的功能,你几乎肯定会用其他东西做得更好。