我正在编写一个小项目,它使用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");
}
Run Code Online (Sandbox Code Playgroud)
您发布的代码中的问题非常简单: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;
}
Run Code Online (Sandbox Code Playgroud)
在实际使用中,无论如何,您都会将HTTP响应读入缓冲区。您遇到的问题仅在像您生成的简单测试用例中出现。同时,它确实指出了strtok一个功能设计不佳的事实,并且几乎可以肯定,您会发现其他功能会更好。